home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2002 November / CD 1 / APC0211D1.ISO / workshop / prog / files / ActivePerl-5.6.1.633-MSWin32.msi / _8f156b9745a8b8ee165f4f32697ac012 < prev    next >
Encoding:
Text File  |  2002-01-10  |  96.7 KB  |  3,564 lines

  1. /*    perl.h
  2.  *
  3.  *    Copyright (c) 1987-2001, Larry Wall
  4.  *
  5.  *    You may distribute under the terms of either the GNU General Public
  6.  *    License or the Artistic License, as specified in the README file.
  7.  *
  8.  */
  9. #ifndef H_PERL
  10. #define H_PERL 1
  11.  
  12. #ifdef PERL_FOR_X2P
  13. /*
  14.  * This file is being used for x2p stuff. 
  15.  * Above symbol is defined via -D in 'x2p/Makefile.SH'
  16.  * Decouple x2p stuff from some of perls more extreme eccentricities. 
  17.  */
  18. #undef MULTIPLICITY
  19. #undef USE_STDIO
  20. #define USE_STDIO
  21. #endif /* PERL_FOR_X2P */
  22.  
  23. #define VOIDUSED 1
  24. #include "config.h"
  25.  
  26. #if defined(USE_ITHREADS) && defined(USE_5005THREADS)
  27. #  include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
  28. #endif
  29.  
  30. /* XXX This next guard can disappear if the sources are revised
  31.    to use USE_5005THREADS throughout. -- A.D  1/6/2000
  32. */
  33. #if defined(USE_ITHREADS) && defined(USE_THREADS)
  34. #  include "error: USE_ITHREADS and USE_THREADS are incompatible"
  35. #endif
  36.  
  37. /* See L<perlguts/"The Perl API"> for detailed notes on
  38.  * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */
  39.  
  40. #ifdef USE_ITHREADS
  41. #  if !defined(MULTIPLICITY) && !defined(PERL_OBJECT)
  42. #    define MULTIPLICITY
  43. #  endif
  44. #endif
  45.  
  46. #ifdef USE_THREADS
  47. #  ifndef PERL_IMPLICIT_CONTEXT
  48. #    define PERL_IMPLICIT_CONTEXT
  49. #  endif
  50. #endif
  51.  
  52. #if defined(MULTIPLICITY)
  53. #  ifndef PERL_IMPLICIT_CONTEXT
  54. #    define PERL_IMPLICIT_CONTEXT
  55. #  endif
  56. #endif
  57.  
  58. #ifdef PERL_CAPI
  59. #  undef PERL_OBJECT
  60. #  ifndef MULTIPLICITY
  61. #    define MULTIPLICITY
  62. #  endif
  63. #  ifndef PERL_IMPLICIT_CONTEXT
  64. #    define PERL_IMPLICIT_CONTEXT
  65. #  endif
  66. #  ifndef PERL_IMPLICIT_SYS
  67. #    define PERL_IMPLICIT_SYS
  68. #  endif
  69. #endif
  70.  
  71. #ifdef PERL_OBJECT
  72. #  ifndef PERL_IMPLICIT_CONTEXT
  73. #    define PERL_IMPLICIT_CONTEXT
  74. #  endif
  75. #  ifndef PERL_IMPLICIT_SYS
  76. #    define PERL_IMPLICIT_SYS
  77. #  endif
  78. #endif
  79.  
  80. #ifdef PERL_OBJECT
  81.  
  82. /* PERL_OBJECT explained  - DickH and DougL @ ActiveState.com
  83.  
  84. Defining PERL_OBJECT turns on creation of a C++ object that
  85. contains all writable core perl global variables and functions.
  86. Stated another way, all necessary global variables and functions
  87. are members of a big C++ object. This object's class is CPerlObj.
  88. This allows a Perl Host to have multiple, independent perl
  89. interpreters in the same process space. This is very important on
  90. Win32 systems as the overhead of process creation is quite high --
  91. this could be even higher than the script compile and execute time
  92. for small scripts.
  93.  
  94. The perl executable implementation on Win32 is composed of perl.exe
  95. (the Perl Host) and perlX.dll. (the Perl Core). This allows the
  96. same Perl Core to easily be embedded in other applications that use
  97. the perl interpreter.
  98.  
  99. +-----------+
  100. | Perl Host |
  101. +-----------+
  102.       ^
  103.       |
  104.       v
  105. +-----------+   +-----------+
  106. | Perl Core |<->| Extension |
  107. +-----------+   +-----------+ ...
  108.  
  109. Defining PERL_OBJECT has the following effects:
  110.  
  111. PERL CORE
  112. 1. CPerlObj is defined (this is the PERL_OBJECT)
  113. 2. all static functions that needed to access either global
  114. variables or functions needed are made member functions
  115. 3. all writable static variables are made member variables
  116. 4. all global variables and functions are defined as:
  117.     #define var CPerlObj::PL_var
  118.     #define func CPerlObj::Perl_func
  119.     * these are in embed.h
  120. This necessitated renaming some local variables and functions that
  121. had the same name as a global variable or function. This was
  122. probably a _good_ thing anyway.
  123.  
  124.  
  125. EXTENSIONS
  126. 1. Access to global variables and perl functions is through a
  127. pointer to the PERL_OBJECT. This pointer type is CPerlObj*. This is
  128. made transparent to extension developers by the following macros:
  129.     #define var pPerl->PL_var
  130.     #define func pPerl->Perl_func
  131.     * these are done in objXSUB.h
  132. This requires that the extension be compiled as C++, which means
  133. that the code must be ANSI C and not K&R C. For K&R extensions,
  134. please see the C API notes located in Win32/GenCAPI.pl. This script
  135. creates a perlCAPI.lib that provides a K & R compatible C interface
  136. to the PERL_OBJECT.
  137. 2. Local variables and functions cannot have the same name as perl's
  138. variables or functions since the macros will redefine these. Look for
  139. this if you get some strange error message and it does not look like
  140. the code that you had written. This often happens with variables that
  141. are local to a function.
  142.  
  143. PERL HOST
  144. 1. The perl host is linked with perlX.lib to get perl_alloc. This
  145. function will return a pointer to CPerlObj (the PERL_OBJECT). It
  146. takes pointers to the various PerlXXX_YYY interfaces (see iperlsys.h
  147. for more information on this).
  148. 2. The perl host calls the same functions as normally would be
  149. called in setting up and running a perl script, except that the
  150. functions are now member functions of the PERL_OBJECT.
  151.  
  152. */
  153.  
  154.  
  155. class CPerlObj;
  156.  
  157. #define STATIC
  158. #define CPERLscope(x)        CPerlObj::x
  159. #define CALL_FPTR(fptr)        (aTHXo->*fptr)
  160.  
  161. #define pTHXo            CPerlObj *pPerl
  162. #define pTHXo_            pTHXo,
  163. #define aTHXo            this
  164. #define aTHXo_            this,
  165. #define PERL_OBJECT_THIS    aTHXo
  166. #define PERL_OBJECT_THIS_    aTHXo_
  167. #define dTHXoa(a)        pTHXo = (CPerlObj*)a
  168. #define dTHXo            pTHXo = PERL_GET_THX
  169.  
  170. #define pTHXx        void
  171. #define pTHXx_
  172. #define aTHXx
  173. #define aTHXx_
  174.  
  175. #else /* !PERL_OBJECT */
  176.  
  177. #ifdef PERL_IMPLICIT_CONTEXT
  178. #  ifdef USE_THREADS
  179. struct perl_thread;
  180. #    define pTHX    register struct perl_thread *thr
  181. #    define aTHX    thr
  182. #    define dTHR    dNOOP /* only backward compatibility */
  183. #    define dTHXa(a)    pTHX = (struct perl_thread*)a
  184. #  else
  185. #    ifndef MULTIPLICITY
  186. #      define MULTIPLICITY
  187. #    endif
  188. #    define pTHX    register PerlInterpreter *my_perl
  189. #    define aTHX    my_perl
  190. #    define dTHXa(a)    pTHX = (PerlInterpreter*)a
  191. #  endif
  192. #  define dTHX        pTHX = PERL_GET_THX
  193. #  define pTHX_        pTHX,
  194. #  define aTHX_        aTHX,
  195. #  define pTHX_1    2    
  196. #  define pTHX_2    3
  197. #  define pTHX_3    4
  198. #  define pTHX_4    5
  199. #endif
  200.  
  201. #define STATIC static
  202. #define CPERLscope(x) x
  203. #define CPERLarg void
  204. #define CPERLarg_
  205. #define _CPERLarg
  206. #define PERL_OBJECT_THIS
  207. #define _PERL_OBJECT_THIS
  208. #define PERL_OBJECT_THIS_
  209. #define CALL_FPTR(fptr) (*fptr)
  210.  
  211. #endif /* PERL_OBJECT */
  212.  
  213. #define CALLRUNOPS  CALL_FPTR(PL_runops)
  214. #define CALLREGCOMP CALL_FPTR(PL_regcompp)
  215. #define CALLREGEXEC CALL_FPTR(PL_regexecp)
  216. #define CALLREG_INTUIT_START CALL_FPTR(PL_regint_start)
  217. #define CALLREG_INTUIT_STRING CALL_FPTR(PL_regint_string)
  218. #define CALLREGFREE CALL_FPTR(PL_regfree)
  219.  
  220. #ifdef PERL_FLEXIBLE_EXCEPTIONS
  221. #  define CALLPROTECT CALL_FPTR(PL_protect)
  222. #endif
  223.  
  224. #define NOOP (void)0
  225. #define dNOOP extern int Perl___notused
  226.  
  227. #ifndef pTHX
  228. #  define pTHX        void
  229. #  define pTHX_
  230. #  define aTHX
  231. #  define aTHX_
  232. #  define dTHXa(a)    dNOOP
  233. #  define dTHX        dNOOP
  234. #  define pTHX_1    1    
  235. #  define pTHX_2    2
  236. #  define pTHX_3    3
  237. #  define pTHX_4    4
  238. #endif
  239.  
  240. #ifndef pTHXo
  241. #  define pTHXo        pTHX
  242. #  define pTHXo_    pTHX_
  243. #  define aTHXo        aTHX
  244. #  define aTHXo_    aTHX_
  245. #  define dTHXo        dTHX
  246. #  define dTHXoa(x)    dTHXa(x)
  247. #endif
  248.  
  249. #ifndef pTHXx
  250. #  define pTHXx        register PerlInterpreter *my_perl
  251. #  define pTHXx_    pTHXx,
  252. #  define aTHXx        my_perl
  253. #  define aTHXx_    aTHXx,
  254. #  define dTHXx        dTHX
  255. #endif
  256.  
  257. /* Under PERL_IMPLICIT_SYS (used in Windows for fork emulation)
  258.  * PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...).
  259.  * dTHXs is therefore needed for all functions using PerlIO_foo(). */
  260. #ifdef PERL_IMPLICIT_SYS
  261. #  define dTHXs        dTHX
  262. #else
  263. #  define dTHXs        dNOOP
  264. #endif
  265.  
  266. #undef START_EXTERN_C
  267. #undef END_EXTERN_C
  268. #undef EXTERN_C
  269. #ifdef __cplusplus
  270. #  define START_EXTERN_C extern "C" {
  271. #  define END_EXTERN_C }
  272. #  define EXTERN_C extern "C"
  273. #else
  274. #  define START_EXTERN_C 
  275. #  define END_EXTERN_C 
  276. #  define EXTERN_C extern
  277. #endif
  278.  
  279. #ifdef OP_IN_REGISTER
  280. #  ifdef __GNUC__
  281. #    define stringify_immed(s) #s
  282. #    define stringify(s) stringify_immed(s)
  283. register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
  284. #  endif
  285. #endif
  286.  
  287. /*
  288.  * STMT_START { statements; } STMT_END;
  289.  * can be used as a single statement, as in
  290.  * if (x) STMT_START { ... } STMT_END; else ...
  291.  *
  292.  * Trying to select a version that gives no warnings...
  293.  */
  294. #if !(defined(STMT_START) && defined(STMT_END))
  295. # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
  296. #   define STMT_START    (void)(    /* gcc supports ``({ STATEMENTS; })'' */
  297. #   define STMT_END    )
  298. # else
  299.    /* Now which other defined()s do we need here ??? */
  300. #  if (VOIDFLAGS) && (defined(sun) || defined(__sun__))
  301. #   define STMT_START    if (1)
  302. #   define STMT_END    else (void)0
  303. #  else
  304. #   define STMT_START    do
  305. #   define STMT_END    while (0)
  306. #  endif
  307. # endif
  308. #endif
  309.  
  310. #define WITH_THX(s) STMT_START { dTHX; s; } STMT_END
  311. #define WITH_THR(s) WITH_THX(s)
  312.  
  313. /*
  314.  * SOFT_CAST can be used for args to prototyped functions to retain some
  315.  * type checking; it only casts if the compiler does not know prototypes.
  316.  */
  317. #if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE)
  318. #define SOFT_CAST(type)    
  319. #else
  320. #define SOFT_CAST(type)    (type)
  321. #endif
  322.  
  323. #ifndef BYTEORDER  /* Should never happen -- byteorder is in config.h */
  324. #   define BYTEORDER 0x1234
  325. #endif
  326.  
  327. /* Overall memory policy? */
  328. #ifndef CONSERVATIVE
  329. #   define LIBERAL 1
  330. #endif
  331.  
  332. #if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
  333. #define ASCIIish
  334. #else
  335. #undef  ASCIIish
  336. #endif
  337.  
  338. /*
  339.  * The following contortions are brought to you on behalf of all the
  340.  * standards, semi-standards, de facto standards, not-so-de-facto standards
  341.  * of the world, as well as all the other botches anyone ever thought of.
  342.  * The basic theory is that if we work hard enough here, the rest of the
  343.  * code can be a lot prettier.  Well, so much for theory.  Sorry, Henry...
  344.  */
  345.  
  346. /* define this once if either system, instead of cluttering up the src */
  347. #if defined(MSDOS) || defined(atarist) || defined(WIN32)
  348. #define DOSISH 1
  349. #endif
  350.  
  351. #if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC)
  352. # define STANDARD_C 1
  353. #endif
  354.  
  355. #if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX) || defined( EPOC) || defined(__QNX__)
  356. # define DONT_DECLARE_STD 1
  357. #endif
  358.  
  359. #if defined(HASVOLATILE) || defined(STANDARD_C)
  360. #   ifdef __cplusplus
  361. #    define VOL        // to temporarily suppress warnings
  362. #   else
  363. #    define VOL volatile
  364. #   endif
  365. #else
  366. #   define VOL
  367. #endif
  368.  
  369. #define TAINT        (PL_tainted = TRUE)
  370. #define TAINT_NOT    (PL_tainted = FALSE)
  371. #define TAINT_IF(c)    if (c) { PL_tainted = TRUE; }
  372. #define TAINT_ENV()    if (PL_tainting) { taint_env(); }
  373. #define TAINT_PROPER(s)    if (PL_tainting) { taint_proper(Nullch, s); }
  374.  
  375. /* XXX All process group stuff is handled in pp_sys.c.  Should these 
  376.    defines move there?  If so, I could simplify this a lot. --AD  9/96.
  377. */
  378. /* Process group stuff changed from traditional BSD to POSIX.
  379.    perlfunc.pod documents the traditional BSD-style syntax, so we'll
  380.    try to preserve that, if possible.
  381. */
  382. #ifdef HAS_SETPGID
  383. #  define BSD_SETPGRP(pid, pgrp)    setpgid((pid), (pgrp))
  384. #else
  385. #  if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
  386. #    define BSD_SETPGRP(pid, pgrp)    setpgrp((pid), (pgrp))
  387. #  else
  388. #    ifdef HAS_SETPGRP2  /* DG/UX */
  389. #      define BSD_SETPGRP(pid, pgrp)    setpgrp2((pid), (pgrp))
  390. #    endif
  391. #  endif
  392. #endif
  393. #if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
  394. #  define HAS_SETPGRP  /* Well, effectively it does . . . */
  395. #endif
  396.  
  397. /* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
  398.     our life easier :-) so we'll try it.
  399. */
  400. #ifdef HAS_GETPGID
  401. #  define BSD_GETPGRP(pid)        getpgid((pid))
  402. #else
  403. #  if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
  404. #    define BSD_GETPGRP(pid)        getpgrp((pid))
  405. #  else
  406. #    ifdef HAS_GETPGRP2  /* DG/UX */
  407. #      define BSD_GETPGRP(pid)        getpgrp2((pid))
  408. #    endif
  409. #  endif
  410. #endif
  411. #if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
  412. #  define HAS_GETPGRP  /* Well, effectively it does . . . */
  413. #endif
  414.  
  415. /* These are not exact synonyms, since setpgrp() and getpgrp() may 
  416.    have different behaviors, but perl.h used to define USE_BSDPGRP
  417.    (prior to 5.003_05) so some extension might depend on it.
  418. */
  419. #if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
  420. #  ifndef USE_BSDPGRP
  421. #    define USE_BSDPGRP
  422. #  endif
  423. #endif
  424.  
  425. /* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that
  426.    pthread.h must be included before all other header files.
  427. */
  428. #if (defined(USE_THREADS) || defined(USE_ITHREADS)) \
  429.     && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
  430. #  include <pthread.h>
  431. #endif
  432.  
  433. #ifndef _TYPES_        /* If types.h defines this it's easy. */
  434. #   ifndef major        /* Does everyone's types.h define this? */
  435. #    include <sys/types.h>
  436. #   endif
  437. #endif
  438.  
  439. #ifdef __cplusplus
  440. #  ifndef I_STDARG
  441. #    define I_STDARG 1
  442. #  endif
  443. #endif
  444.  
  445. #ifdef I_STDARG
  446. #  include <stdarg.h>
  447. #else
  448. #  ifdef I_VARARGS
  449. #    include <varargs.h>
  450. #  endif
  451. #endif
  452.  
  453. #ifdef USE_NEXT_CTYPE
  454.  
  455. #if NX_CURRENT_COMPILER_RELEASE >= 500
  456. #  include <bsd/ctypes.h>
  457. #else
  458. #  if NX_CURRENT_COMPILER_RELEASE >= 400
  459. #    include <objc/NXCType.h>
  460. #  else /*  NX_CURRENT_COMPILER_RELEASE < 400 */
  461. #    include <appkit/NXCType.h>
  462. #  endif /*  NX_CURRENT_COMPILER_RELEASE >= 400 */
  463. #endif /*  NX_CURRENT_COMPILER_RELEASE >= 500 */
  464.  
  465. #else /* !USE_NEXT_CTYPE */
  466. #include <ctype.h>
  467. #endif /* USE_NEXT_CTYPE */
  468.  
  469. #ifdef METHOD     /* Defined by OSF/1 v3.0 by ctype.h */
  470. #undef METHOD
  471. #endif
  472.  
  473. #ifdef I_LOCALE
  474. #   include <locale.h>
  475. #endif
  476.  
  477. #if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
  478. #   define USE_LOCALE
  479. #   if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
  480.        && defined(HAS_STRXFRM)
  481. #    define USE_LOCALE_COLLATE
  482. #   endif
  483. #   if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
  484. #    define USE_LOCALE_CTYPE
  485. #   endif
  486. #   if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
  487. #    define USE_LOCALE_NUMERIC
  488. #   endif
  489. #endif /* !NO_LOCALE && HAS_SETLOCALE */
  490.  
  491. #include <setjmp.h>
  492.  
  493. #ifdef I_SYS_PARAM
  494. #   ifdef PARAM_NEEDS_TYPES
  495. #    include <sys/types.h>
  496. #   endif
  497. #   include <sys/param.h>
  498. #endif
  499.  
  500. /* Use all the "standard" definitions? */
  501. #if defined(STANDARD_C) && defined(I_STDLIB)
  502. #   include <stdlib.h>
  503. #endif
  504.  
  505. /* If this causes problems, set i_unistd=undef in the hint file.  */
  506. #ifdef I_UNISTD
  507. #   include <unistd.h>
  508. #endif
  509.  
  510. #ifdef PERL_MICRO /* Last chance to export Perl_my_swap */
  511. #  define MYSWAP
  512. #endif
  513.  
  514. #if !defined(PERL_FOR_X2P) && !defined(WIN32)
  515. #  include "embed.h"
  516. #endif
  517.  
  518. #define MEM_SIZE Size_t
  519.  
  520. #if defined(STANDARD_C) && defined(I_STDDEF)
  521. #   include <stddef.h>
  522. #   define STRUCT_OFFSET(s,m)  offsetof(s,m)
  523. #else
  524. #   define STRUCT_OFFSET(s,m)  (Size_t)(&(((s *)0)->m))
  525. #endif
  526.  
  527. #if defined(I_STRING) || defined(__cplusplus)
  528. #   include <string.h>
  529. #else
  530. #   include <strings.h>
  531. #endif
  532.  
  533. /* This comes after <stdlib.h> so we don't try to change the standard
  534.  * library prototypes; we'll use our own in proto.h instead. */
  535.  
  536. #ifdef MYMALLOC
  537. #  ifdef PERL_POLLUTE_MALLOC
  538. #   ifndef PERL_EXTMALLOC_DEF
  539. #    define Perl_malloc        malloc
  540. #    define Perl_calloc        calloc
  541. #    define Perl_realloc    realloc
  542. #    define Perl_mfree        free
  543. #   endif
  544. #  else
  545. #    define EMBEDMYMALLOC    /* for compatibility */
  546. #  endif
  547. Malloc_t Perl_malloc (MEM_SIZE nbytes);
  548. Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size);
  549. Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes);
  550. /* 'mfree' rather than 'free', since there is already a 'perl_free'
  551.  * that causes clashes with case-insensitive linkers */
  552. Free_t   Perl_mfree (Malloc_t where);
  553.  
  554. typedef struct perl_mstats perl_mstats_t;
  555.  
  556. #  define safemalloc  Perl_malloc
  557. #  define safecalloc  Perl_calloc
  558. #  define saferealloc Perl_realloc
  559. #  define safefree    Perl_mfree
  560. #else  /* MYMALLOC */
  561. #  define safemalloc  safesysmalloc
  562. #  define safecalloc  safesyscalloc
  563. #  define saferealloc safesysrealloc
  564. #  define safefree    safesysfree
  565. #endif /* MYMALLOC */
  566.  
  567. #if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
  568. #define strchr index
  569. #define strrchr rindex
  570. #endif
  571.  
  572. #ifdef I_MEMORY
  573. #  include <memory.h>
  574. #endif
  575.  
  576. #ifdef HAS_MEMCPY
  577. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  578. #    ifndef memcpy
  579.         extern char * memcpy (char*, char*, int);
  580. #    endif
  581. #  endif
  582. #else
  583. #   ifndef memcpy
  584. #    ifdef HAS_BCOPY
  585. #        define memcpy(d,s,l) bcopy(s,d,l)
  586. #    else
  587. #        define memcpy(d,s,l) my_bcopy(s,d,l)
  588. #    endif
  589. #   endif
  590. #endif /* HAS_MEMCPY */
  591.  
  592. #ifdef HAS_MEMSET
  593. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  594. #    ifndef memset
  595.     extern char *memset (char*, int, int);
  596. #    endif
  597. #  endif
  598. #else
  599. #  define memset(d,c,l) my_memset(d,c,l)
  600. #endif /* HAS_MEMSET */
  601.  
  602. #if !defined(HAS_MEMMOVE) && !defined(memmove)
  603. #   if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
  604. #    define memmove(d,s,l) bcopy(s,d,l)
  605. #   else
  606. #    if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
  607. #        define memmove(d,s,l) memcpy(d,s,l)
  608. #    else
  609. #        define memmove(d,s,l) my_bcopy(s,d,l)
  610. #    endif
  611. #   endif
  612. #endif
  613.  
  614. #if defined(mips) && defined(ultrix) && !defined(__STDC__)
  615. #   undef HAS_MEMCMP
  616. #endif
  617.  
  618. #if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
  619. #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
  620. #    ifndef memcmp
  621.     extern int memcmp (char*, char*, int);
  622. #    endif
  623. #  endif
  624. #  ifdef BUGGY_MSC
  625.   #  pragma function(memcmp)
  626. #  endif
  627. #else
  628. #   ifndef memcmp
  629. #    define memcmp     my_memcmp
  630. #   endif
  631. #endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
  632.  
  633. #ifndef memzero
  634. #   ifdef HAS_MEMSET
  635. #    define memzero(d,l) memset(d,0,l)
  636. #   else
  637. #    ifdef HAS_BZERO
  638. #        define memzero(d,l) bzero(d,l)
  639. #    else
  640. #        define memzero(d,l) my_bzero(d,l)
  641. #    endif
  642. #   endif
  643. #endif
  644.  
  645. #ifndef memchr
  646. #   ifndef HAS_MEMCHR
  647. #       define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)
  648. #   endif
  649. #endif
  650.  
  651. #ifndef HAS_BCMP
  652. #   ifndef bcmp
  653. #    define bcmp(s1,s2,l) memcmp(s1,s2,l)
  654. #   endif
  655. #endif /* !HAS_BCMP */
  656.  
  657. #ifdef I_NETINET_IN
  658. #   include <netinet/in.h>
  659. #endif
  660.  
  661. #ifdef I_ARPA_INET
  662. #   include <arpa/inet.h>
  663. #endif
  664.  
  665. #if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
  666. /* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
  667.  * (the neo-BSD seem to do this).  */
  668. #   undef SF_APPEND
  669. #endif
  670.  
  671. #ifdef I_SYS_STAT
  672. #   include <sys/stat.h>
  673. #endif
  674.  
  675. /* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
  676.    like UTekV) are broken, sometimes giving false positives.  Undefine
  677.    them here and let the code below set them to proper values.
  678.  
  679.    The ghs macro stands for GreenHills Software C-1.8.5 which
  680.    is the C compiler for sysV88 and the various derivatives.
  681.    This header file bug is corrected in gcc-2.5.8 and later versions.
  682.    --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94.  */
  683.  
  684. #if defined(uts) || (defined(m88k) && defined(ghs))
  685. #   undef S_ISDIR
  686. #   undef S_ISCHR
  687. #   undef S_ISBLK
  688. #   undef S_ISREG
  689. #   undef S_ISFIFO
  690. #   undef S_ISLNK
  691. #endif
  692.  
  693. #ifdef I_TIME
  694. #   include <time.h>
  695. #endif
  696.  
  697. #ifdef I_SYS_TIME
  698. #   ifdef I_SYS_TIME_KERNEL
  699. #    define KERNEL
  700. #   endif
  701. #   include <sys/time.h>
  702. #   ifdef I_SYS_TIME_KERNEL
  703. #    undef KERNEL
  704. #   endif
  705. #endif
  706.  
  707. #if defined(HAS_TIMES) && defined(I_SYS_TIMES)
  708. #    include <sys/times.h>
  709. #endif
  710.  
  711. #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
  712. #   undef HAS_STRERROR
  713. #endif
  714.  
  715. #include <errno.h>
  716.  
  717. #if defined(WIN32) && (defined(PERL_OBJECT) || defined(PERL_IMPLICIT_SYS) || defined(PERL_CAPI))
  718. #  define WIN32SCK_IS_STDSCK        /* don't pull in custom wsock layer */
  719. #endif
  720.  
  721. #if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.h */
  722. # include <sys/socket.h>
  723. # if defined(USE_SOCKS) && defined(I_SOCKS)
  724. #   if !defined(INCLUDE_PROTOTYPES)
  725. #       define INCLUDE_PROTOTYPES /* for <socks.h> */
  726. #       define PERL_SOCKS_NEED_PROTOTYPES
  727. #   endif
  728. #   ifdef USE_THREADS
  729. #       define PERL_USE_THREADS /* store our value */
  730. #       undef USE_THREADS
  731. #   endif
  732. #   include <socks.h>
  733. #   ifdef USE_THREADS
  734. #       undef USE_THREADS /* socks.h does this on its own */
  735. #   endif
  736. #   ifdef PERL_USE_THREADS
  737. #       define USE_THREADS /* restore our value */
  738. #       undef PERL_USE_THREADS
  739. #   endif
  740. #   ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */
  741. #       undef INCLUDE_PROTOTYPES
  742. #       undef PERL_SOCKS_NEED_PROTOTYPES
  743. #   endif
  744. #   ifdef USE_64_BIT_ALL
  745. #       define SOCKS_64BIT_BUG /* until proven otherwise */
  746. #   endif
  747. # endif 
  748. # ifdef I_NETDB
  749. #  include <netdb.h>
  750. # endif
  751. # ifndef ENOTSOCK
  752. #  ifdef I_NET_ERRNO
  753. #   include <net/errno.h>
  754. #  endif
  755. # endif
  756. #endif
  757.  
  758. #ifdef SETERRNO
  759. # undef SETERRNO  /* SOCKS might have defined this */
  760. #endif
  761.  
  762. #ifdef VMS
  763. #   define SETERRNO(errcode,vmserrcode) \
  764.     STMT_START {            \
  765.         set_errno(errcode);        \
  766.         set_vaxc_errno(vmserrcode);    \
  767.     } STMT_END
  768. #else
  769. #   define SETERRNO(errcode,vmserrcode) (errno = (errcode))
  770. #endif
  771.  
  772. #ifdef USE_THREADS
  773. #  define ERRSV (thr->errsv)
  774. #  define DEFSV THREADSV(0)
  775. #  define SAVE_DEFSV save_threadsv(0)
  776. #else
  777. #  define ERRSV GvSV(PL_errgv)
  778. #  define DEFSV GvSV(PL_defgv)
  779. #  define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
  780. #endif /* USE_THREADS */
  781.  
  782. #define ERRHV GvHV(PL_errgv)    /* XXX unused, here for compatibility */
  783.  
  784. #ifndef errno
  785.     extern int errno;     /* ANSI allows errno to be an lvalue expr.
  786.                    * For example in multithreaded environments
  787.                    * something like this might happen:
  788.                    * extern int *_errno(void);
  789.                    * #define errno (*_errno()) */
  790. #endif
  791.  
  792. #ifdef HAS_STRERROR
  793. #       ifdef VMS
  794.     char *strerror (int,...);
  795. #       else
  796. #ifndef DONT_DECLARE_STD
  797.     char *strerror (int);
  798. #endif
  799. #       endif
  800. #       ifndef Strerror
  801. #           define Strerror strerror
  802. #       endif
  803. #else
  804. #    ifdef HAS_SYS_ERRLIST
  805.     extern int sys_nerr;
  806.     extern char *sys_errlist[];
  807. #       ifndef Strerror
  808. #           define Strerror(e) \
  809.         ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
  810. #       endif
  811. #   endif
  812. #endif
  813.  
  814. #ifdef I_SYS_IOCTL
  815. #   ifndef _IOCTL_
  816. #    include <sys/ioctl.h>
  817. #   endif
  818. #endif
  819.  
  820. #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
  821. #   ifdef HAS_SOCKETPAIR
  822. #    undef HAS_SOCKETPAIR
  823. #   endif
  824. #   ifdef I_NDBM
  825. #    undef I_NDBM
  826. #   endif
  827. #endif
  828.  
  829. #if INTSIZE == 2
  830. #   define htoni htons
  831. #   define ntohi ntohs
  832. #else
  833. #   define htoni htonl
  834. #   define ntohi ntohl
  835. #endif
  836.  
  837. /* Configure already sets Direntry_t */
  838. #if defined(I_DIRENT)
  839. #   include <dirent.h>
  840.     /* NeXT needs dirent + sys/dir.h */
  841. #   if  defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__))
  842. #    include <sys/dir.h>
  843. #   endif
  844. #else
  845. #   ifdef I_SYS_NDIR
  846. #    include <sys/ndir.h>
  847. #   else
  848. #    ifdef I_SYS_DIR
  849. #        ifdef hp9000s500
  850. #        include <ndir.h>    /* may be wrong in the future */
  851. #        else
  852. #        include <sys/dir.h>
  853. #        endif
  854. #    endif
  855. #   endif
  856. #endif
  857.  
  858. #ifdef FPUTS_BOTCH
  859. /* work around botch in SunOS 4.0.1 and 4.0.2 */
  860. #   ifndef fputs
  861. #    define fputs(sv,fp) fprintf(fp,"%s",sv)
  862. #   endif
  863. #endif
  864.  
  865. /*
  866.  * The following gobbledygook brought to you on behalf of __STDC__.
  867.  * (I could just use #ifndef __STDC__, but this is more bulletproof
  868.  * in the face of half-implementations.)
  869.  */
  870.  
  871. #ifdef I_SYSMODE
  872. #include <sys/mode.h>
  873. #endif
  874.  
  875. #ifndef S_IFMT
  876. #   ifdef _S_IFMT
  877. #    define S_IFMT _S_IFMT
  878. #   else
  879. #    define S_IFMT 0170000
  880. #   endif
  881. #endif
  882.  
  883. #ifndef S_ISDIR
  884. #   define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
  885. #endif
  886.  
  887. #ifndef S_ISCHR
  888. #   define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
  889. #endif
  890.  
  891. #ifndef S_ISBLK
  892. #   ifdef S_IFBLK
  893. #    define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
  894. #   else
  895. #    define S_ISBLK(m) (0)
  896. #   endif
  897. #endif
  898.  
  899. #ifndef S_ISREG
  900. #   define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
  901. #endif
  902.  
  903. #ifndef S_ISFIFO
  904. #   ifdef S_IFIFO
  905. #    define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
  906. #   else
  907. #    define S_ISFIFO(m) (0)
  908. #   endif
  909. #endif
  910.  
  911. #ifndef S_ISLNK
  912. #   ifdef _S_ISLNK
  913. #    define S_ISLNK(m) _S_ISLNK(m)
  914. #   else
  915. #    ifdef _S_IFLNK
  916. #        define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
  917. #    else
  918. #        ifdef S_IFLNK
  919. #        define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
  920. #        else
  921. #        define S_ISLNK(m) (0)
  922. #        endif
  923. #    endif
  924. #   endif
  925. #endif
  926.  
  927. #ifndef S_ISSOCK
  928. #   ifdef _S_ISSOCK
  929. #    define S_ISSOCK(m) _S_ISSOCK(m)
  930. #   else
  931. #    ifdef _S_IFSOCK
  932. #        define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
  933. #    else
  934. #        ifdef S_IFSOCK
  935. #        define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
  936. #        else
  937. #        define S_ISSOCK(m) (0)
  938. #        endif
  939. #    endif
  940. #   endif
  941. #endif
  942.  
  943. #ifndef S_IRUSR
  944. #   ifdef S_IREAD
  945. #    define S_IRUSR S_IREAD
  946. #    define S_IWUSR S_IWRITE
  947. #    define S_IXUSR S_IEXEC
  948. #   else
  949. #    define S_IRUSR 0400
  950. #    define S_IWUSR 0200
  951. #    define S_IXUSR 0100
  952. #   endif
  953. #endif
  954.  
  955. #ifndef S_IRGRP
  956. #   ifdef S_IRUSR
  957. #       define S_IRGRP (S_IRUSR>>3)
  958. #       define S_IWGRP (S_IWUSR>>3)
  959. #       define S_IXGRP (S_IXUSR>>3)
  960. #   else
  961. #       define S_IRGRP 0040
  962. #       define S_IWGRP 0020
  963. #       define S_IXGRP 0010
  964. #   endif
  965. #endif
  966.  
  967. #ifndef S_IROTH
  968. #   ifdef S_IRUSR
  969. #       define S_IROTH (S_IRUSR>>6)
  970. #       define S_IWOTH (S_IWUSR>>6)
  971. #       define S_IXOTH (S_IXUSR>>6)
  972. #   else
  973. #       define S_IROTH 0040
  974. #       define S_IWOTH 0020
  975. #       define S_IXOTH 0010
  976. #   endif
  977. #endif
  978.  
  979. #ifndef S_ISUID
  980. #   define S_ISUID 04000
  981. #endif
  982.  
  983. #ifndef S_ISGID
  984. #   define S_ISGID 02000
  985. #endif
  986.  
  987. #ifndef S_IRWXU
  988. #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
  989. #endif 
  990.  
  991. #ifndef S_IRWXG
  992. #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
  993. #endif 
  994.  
  995. #ifndef S_IRWXO
  996. #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
  997. #endif 
  998.  
  999. #ifndef S_IREAD
  1000. #   define S_IREAD S_IRUSR
  1001. #endif
  1002.  
  1003. #ifndef S_IWRITE
  1004. #   define S_IWRITE S_IWUSR
  1005. #endif
  1006.  
  1007. #ifndef S_IEXEC
  1008. #   define S_IEXEC S_IXUSR
  1009. #endif
  1010.  
  1011. #ifdef ff_next
  1012. #   undef ff_next
  1013. #endif
  1014.  
  1015. #if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
  1016. #   define SLOPPYDIVIDE
  1017. #endif
  1018.  
  1019. #ifdef UV
  1020. #undef UV
  1021. #endif
  1022.  
  1023. /*
  1024.     The IV type is supposed to be long enough to hold any integral
  1025.     value or a pointer.
  1026.     --Andy Dougherty    August 1996
  1027. */
  1028.  
  1029. typedef IVTYPE IV;
  1030. typedef UVTYPE UV;
  1031.  
  1032. #if defined(USE_64_BIT_INT) && defined(HAS_QUAD)
  1033. #  if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX)
  1034. #    define IV_MAX INT64_MAX
  1035. #    define IV_MIN INT64_MIN
  1036. #    define UV_MAX UINT64_MAX
  1037. #    ifndef UINT64_MIN
  1038. #      define UINT64_MIN 0
  1039. #    endif
  1040. #    define UV_MIN UINT64_MIN
  1041. #  else
  1042. #    define IV_MAX PERL_QUAD_MAX
  1043. #    define IV_MIN PERL_QUAD_MIN
  1044. #    define UV_MAX PERL_UQUAD_MAX
  1045. #    define UV_MIN PERL_UQUAD_MIN
  1046. #  endif
  1047. #  define IV_IS_QUAD
  1048. #  define UV_IS_QUAD
  1049. #else
  1050. #  if defined(INT32_MAX) && IVSIZE == 4
  1051. #    define IV_MAX INT32_MAX
  1052. #    define IV_MIN INT32_MIN
  1053. #    ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
  1054. #        define UV_MAX UINT32_MAX
  1055. #    else
  1056. #        define UV_MAX 4294967295U
  1057. #    endif
  1058. #    ifndef UINT32_MIN
  1059. #      define UINT32_MIN 0
  1060. #    endif
  1061. #    define UV_MIN UINT32_MIN
  1062. #  else
  1063. #    define IV_MAX PERL_LONG_MAX
  1064. #    define IV_MIN PERL_LONG_MIN
  1065. #    define UV_MAX PERL_ULONG_MAX
  1066. #    define UV_MIN PERL_ULONG_MIN
  1067. #  endif
  1068. #  if IVSIZE == 8
  1069. #    define IV_IS_QUAD
  1070. #    define UV_IS_QUAD
  1071. #    ifndef HAS_QUAD
  1072. #      define HAS_QUAD
  1073. #    endif
  1074. #  else
  1075. #    undef IV_IS_QUAD
  1076. #    undef UV_IS_QUAD
  1077. #    undef HAS_QUAD
  1078. #  endif
  1079. #endif
  1080.  
  1081. #define IV_DIG (BIT_DIGITS(IVSIZE * 8))
  1082. #define UV_DIG (BIT_DIGITS(UVSIZE * 8))
  1083.  
  1084. /*   
  1085.  *  The macros INT2PTR and NUM2PTR are (despite their names)
  1086.  *  bi-directional: they will convert int/float to or from pointers.
  1087.  *  However the conversion to int/float are named explicitly:
  1088.  *  PTR2IV, PTR2UV, PTR2NV.
  1089.  *
  1090.  *  For int conversions we do not need two casts if pointers are
  1091.  *  the same size as IV and UV.   Otherwise we need an explicit
  1092.  *  cast (PTRV) to avoid compiler warnings.
  1093.  */
  1094. #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
  1095. #  define PTRV            UV
  1096. #  define INT2PTR(any,d)    (any)(d)
  1097. #else
  1098. #  if PTRSIZE == LONGSIZE 
  1099. #    define PTRV        unsigned long
  1100. #  else
  1101. #    define PTRV        unsigned
  1102. #  endif
  1103. #  define INT2PTR(any,d)    (any)(PTRV)(d)
  1104. #endif
  1105. #define NUM2PTR(any,d)    (any)(PTRV)(d)
  1106. #define PTR2IV(p)    INT2PTR(IV,p)
  1107. #define PTR2UV(p)    INT2PTR(UV,p)
  1108. #define PTR2NV(p)    NUM2PTR(NV,p)
  1109. #if PTRSIZE == LONGSIZE 
  1110. #  define PTR2ul(p)    (unsigned long)(p)
  1111. #else
  1112. #  define PTR2ul(p)    INT2PTR(unsigned long,p)    
  1113. #endif
  1114.   
  1115. #ifdef USE_LONG_DOUBLE
  1116. #  if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE
  1117. #      define LONG_DOUBLE_EQUALS_DOUBLE
  1118. #  endif
  1119. #  if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
  1120. #     undef USE_LONG_DOUBLE /* Ouch! */
  1121. #  endif
  1122. #endif
  1123.  
  1124. #ifdef OVR_DBL_DIG
  1125. /* Use an overridden DBL_DIG */
  1126. # ifdef DBL_DIG
  1127. #  undef DBL_DIG
  1128. # endif
  1129. # define DBL_DIG OVR_DBL_DIG
  1130. #else
  1131. /* The following is all to get DBL_DIG, in order to pick a nice
  1132.    default value for printing floating point numbers in Gconvert.
  1133.    (see config.h)
  1134. */
  1135. #ifdef I_LIMITS
  1136. #include <limits.h>
  1137. #endif
  1138. #ifdef I_FLOAT
  1139. #include <float.h>
  1140. #endif
  1141. #ifndef HAS_DBL_DIG
  1142. #define DBL_DIG    15   /* A guess that works lots of places */
  1143. #endif
  1144. #endif
  1145. #ifdef I_FLOAT
  1146. #include <float.h>
  1147. #endif
  1148. #ifndef HAS_DBL_DIG
  1149. #define DBL_DIG    15   /* A guess that works lots of places */
  1150. #endif
  1151.  
  1152. #ifdef OVR_LDBL_DIG
  1153. /* Use an overridden LDBL_DIG */
  1154. # ifdef LDBL_DIG
  1155. #  undef LDBL_DIG
  1156. # endif
  1157. # define LDBL_DIG OVR_LDBL_DIG
  1158. #else
  1159. /* The following is all to get LDBL_DIG, in order to pick a nice
  1160.    default value for printing floating point numbers in Gconvert.
  1161.    (see config.h)
  1162. */
  1163. # ifdef I_LIMITS
  1164. #   include <limits.h>
  1165. # endif
  1166. # ifdef I_FLOAT
  1167. #  include <float.h>
  1168. # endif
  1169. # ifndef HAS_LDBL_DIG
  1170. #  if LONG_DOUBLESIZE == 10
  1171. #   define LDBL_DIG 18 /* assume IEEE */
  1172. #  else
  1173. #   if LONG_DOUBLESIZE == 12
  1174. #    define LDBL_DIG 18 /* gcc? */
  1175. #   else
  1176. #    if LONG_DOUBLESIZE == 16
  1177. #     define LDBL_DIG 33 /* assume IEEE */
  1178. #    else
  1179. #     if LONG_DOUBLESIZE == DOUBLESIZE
  1180. #      define LDBL_DIG DBL_DIG /* bummer */
  1181. #     endif
  1182. #    endif
  1183. #   endif
  1184. #  endif
  1185. # endif
  1186. #endif
  1187.  
  1188. typedef NVTYPE NV;
  1189.  
  1190. #ifdef I_IEEEFP
  1191. #   include <ieeefp.h>
  1192. #endif
  1193.  
  1194. #ifdef USE_LONG_DOUBLE
  1195. #   ifdef I_SUNMATH
  1196. #       include <sunmath.h>
  1197. #   endif
  1198. #   define NV_DIG LDBL_DIG
  1199. #   ifdef LDBL_MANT_DIG
  1200. #       define NV_MANT_DIG LDBL_MANT_DIG
  1201. #   endif
  1202. #   ifdef LDBL_MAX
  1203. #       define NV_MAX LDBL_MAX
  1204. #       define NV_MIN LDBL_MIN
  1205. #   else
  1206. #       ifdef HUGE_VALL
  1207. #           define NV_MAX HUGE_VALL
  1208. #       else
  1209. #           ifdef HUGE_VAL
  1210. #               define NV_MAX ((NV)HUGE_VAL)
  1211. #           endif
  1212. #       endif
  1213. #   endif
  1214. #   ifdef HAS_SQRTL
  1215. #       define Perl_cos cosl
  1216. #       define Perl_sin sinl
  1217. #       define Perl_sqrt sqrtl
  1218. #       define Perl_exp expl
  1219. #       define Perl_log logl
  1220. #       define Perl_atan2 atan2l
  1221. #       define Perl_pow powl
  1222. #       define Perl_floor floorl
  1223. #       define Perl_fmod fmodl
  1224. #   endif
  1225. /* e.g. libsunmath doesn't have modfl and frexpl as of mid-March 2000 */
  1226. #   ifdef HAS_MODFL
  1227. #       define Perl_modf(x,y) modfl(x,y)
  1228. #   else
  1229. #       define Perl_modf(x,y) ((long double)modf((double)(x),(double*)(y)))
  1230. #   endif
  1231. #   ifdef HAS_FREXPL
  1232. #       define Perl_frexp(x,y) frexpl(x,y)
  1233. #   else
  1234. #       define Perl_frexp(x,y) ((long double)frexp((double)(x),y))
  1235. #   endif
  1236. #   ifdef HAS_ISNANL
  1237. #       define Perl_isnan(x) isnanl(x)
  1238. #   else
  1239. #       ifdef HAS_ISNAN
  1240. #           define Perl_isnan(x) isnan((double)(x))
  1241. #       else
  1242. #           define Perl_isnan(x) ((x)!=(x))
  1243. #       endif
  1244. #   endif
  1245. #else
  1246. #   define NV_DIG DBL_DIG
  1247. #   ifdef DBL_MANT_DIG
  1248. #       define NV_MANT_DIG DBL_MANT_DIG
  1249. #   endif
  1250. #   ifdef DBL_MAX
  1251. #       define NV_MAX DBL_MAX
  1252. #       define NV_MIN DBL_MIN
  1253. #   else
  1254. #       ifdef HUGE_VAL
  1255. #           define NV_MAX HUGE_VAL
  1256. #       endif
  1257. #   endif
  1258. #   define Perl_cos cos
  1259. #   define Perl_sin sin
  1260. #   define Perl_sqrt sqrt
  1261. #   define Perl_exp exp
  1262. #   define Perl_log log
  1263. #   define Perl_atan2 atan2
  1264. #   define Perl_pow pow
  1265. #   define Perl_floor floor
  1266. #   define Perl_fmod fmod
  1267. #   define Perl_modf(x,y) modf(x,y)
  1268. #   define Perl_frexp(x,y) frexp(x,y)
  1269. #   ifdef HAS_ISNAN
  1270. #       define Perl_isnan(x) isnan(x)
  1271. #   else
  1272. #       define Perl_isnan(x) ((x)!=(x))
  1273. #   endif
  1274. #endif
  1275.  
  1276. #if !defined(Perl_atof) && defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
  1277. #   if !defined(Perl_atof) && defined(HAS_STRTOLD) 
  1278. #       define Perl_atof(s) (NV)strtold(s, (char**)NULL)
  1279. #   endif
  1280. #   if !defined(Perl_atof) && defined(HAS_ATOLF)
  1281. #       define Perl_atof (NV)atolf
  1282. #   endif
  1283. #   if !defined(Perl_atof) && defined(PERL_SCNfldbl)
  1284. #       define Perl_atof PERL_SCNfldbl
  1285. #       define Perl_atof2(s,f) sscanf((s), "%"PERL_SCNfldbl, &(f))
  1286. #   endif
  1287. #endif
  1288. #if !defined(Perl_atof)
  1289. #   define Perl_atof atof /* we assume atof being available anywhere */
  1290. #endif
  1291. #if !defined(Perl_atof2)
  1292. #   define Perl_atof2(s,f) ((f) = (NV)Perl_atof(s))
  1293. #endif
  1294.  
  1295. /* Previously these definitions used hardcoded figures. 
  1296.  * It is hoped these formula are more portable, although
  1297.  * no data one way or another is presently known to me.
  1298.  * The "PERL_" names are used because these calculated constants
  1299.  * do not meet the ANSI requirements for LONG_MAX, etc., which
  1300.  * need to be constants acceptable to #if - kja
  1301.  *    define PERL_LONG_MAX        2147483647L
  1302.  *    define PERL_LONG_MIN        (-LONG_MAX - 1)
  1303.  *    define PERL ULONG_MAX       4294967295L
  1304.  */
  1305.  
  1306. #ifdef I_LIMITS  /* Needed for cast_xxx() functions below. */
  1307. #  include <limits.h>
  1308. #else
  1309. #ifdef I_VALUES
  1310. #  include <values.h>
  1311. #endif
  1312. #endif
  1313.  
  1314. /*
  1315.  * Try to figure out max and min values for the integral types.  THE CORRECT
  1316.  * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE.  The
  1317.  * following hacks are used if neither limits.h or values.h provide them:
  1318.  * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
  1319.  *              for types <  int:  (unsigned TYPE)~(unsigned)0
  1320.  *    The argument to ~ must be unsigned so that later signed->unsigned
  1321.  *    conversion can't modify the value's bit pattern (e.g. -0 -> +0),
  1322.  *    and it must not be smaller than int because ~ does integral promotion.
  1323.  * <type>_MAX: (<type>) (U<type>_MAX >> 1)
  1324.  * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
  1325.  *    The latter is a hack which happens to work on some machines but
  1326.  *    does *not* catch any random system, or things like integer types
  1327.  *    with NaN if that is possible.
  1328.  *
  1329.  * All of the types are explicitly cast to prevent accidental loss of
  1330.  * numeric range, and in the hope that they will be less likely to confuse
  1331.  * over-eager optimizers.
  1332.  *
  1333.  */
  1334.  
  1335. #define PERL_UCHAR_MIN ((unsigned char)0)
  1336.  
  1337. #ifdef UCHAR_MAX
  1338. #  define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
  1339. #else
  1340. #  ifdef MAXUCHAR
  1341. #    define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
  1342. #  else
  1343. #    define PERL_UCHAR_MAX       ((unsigned char)~(unsigned)0)
  1344. #  endif
  1345. #endif
  1346.  
  1347. /*
  1348.  * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
  1349.  * ambiguous. It may be equivalent to (signed char) or (unsigned char)
  1350.  * depending on local options. Until Configure detects this (or at least
  1351.  * detects whether the "signed" keyword is available) the CHAR ranges
  1352.  * will not be included. UCHAR functions normally.
  1353.  *                                                           - kja
  1354.  */
  1355.  
  1356. #define PERL_USHORT_MIN ((unsigned short)0)
  1357.  
  1358. #ifdef USHORT_MAX
  1359. #  define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
  1360. #else
  1361. #  ifdef MAXUSHORT
  1362. #    define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
  1363. #  else
  1364. #    ifdef USHRT_MAX
  1365. #      define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
  1366. #    else
  1367. #      define PERL_USHORT_MAX       ((unsigned short)~(unsigned)0)
  1368. #    endif
  1369. #  endif
  1370. #endif
  1371.  
  1372. #ifdef SHORT_MAX
  1373. #  define PERL_SHORT_MAX ((short)SHORT_MAX)
  1374. #else
  1375. #  ifdef MAXSHORT    /* Often used in <values.h> */
  1376. #    define PERL_SHORT_MAX ((short)MAXSHORT)
  1377. #  else
  1378. #    ifdef SHRT_MAX
  1379. #      define PERL_SHORT_MAX ((short)SHRT_MAX)
  1380. #    else
  1381. #      define PERL_SHORT_MAX      ((short) (PERL_USHORT_MAX >> 1))
  1382. #    endif
  1383. #  endif
  1384. #endif
  1385.  
  1386. #ifdef SHORT_MIN
  1387. #  define PERL_SHORT_MIN ((short)SHORT_MIN)
  1388. #else
  1389. #  ifdef MINSHORT
  1390. #    define PERL_SHORT_MIN ((short)MINSHORT)
  1391. #  else
  1392. #    ifdef SHRT_MIN
  1393. #      define PERL_SHORT_MIN ((short)SHRT_MIN)
  1394. #    else
  1395. #      define PERL_SHORT_MIN        (-PERL_SHORT_MAX - ((3 & -1) == 3))
  1396. #    endif
  1397. #  endif
  1398. #endif
  1399.  
  1400. #ifdef UINT_MAX
  1401. #  define PERL_UINT_MAX ((unsigned int)UINT_MAX)
  1402. #else
  1403. #  ifdef MAXUINT
  1404. #    define PERL_UINT_MAX ((unsigned int)MAXUINT)
  1405. #  else
  1406. #    define PERL_UINT_MAX       (~(unsigned int)0)
  1407. #  endif
  1408. #endif
  1409.  
  1410. #define PERL_UINT_MIN ((unsigned int)0)
  1411.  
  1412. #ifdef INT_MAX
  1413. #  define PERL_INT_MAX ((int)INT_MAX)
  1414. #else
  1415. #  ifdef MAXINT    /* Often used in <values.h> */
  1416. #    define PERL_INT_MAX ((int)MAXINT)
  1417. #  else
  1418. #    define PERL_INT_MAX        ((int)(PERL_UINT_MAX >> 1))
  1419. #  endif
  1420. #endif
  1421.  
  1422. #ifdef INT_MIN
  1423. #  define PERL_INT_MIN ((int)INT_MIN)
  1424. #else
  1425. #  ifdef MININT
  1426. #    define PERL_INT_MIN ((int)MININT)
  1427. #  else
  1428. #    define PERL_INT_MIN        (-PERL_INT_MAX - ((3 & -1) == 3))
  1429. #  endif
  1430. #endif
  1431.  
  1432. #ifdef ULONG_MAX
  1433. #  define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
  1434. #else
  1435. #  ifdef MAXULONG
  1436. #    define PERL_ULONG_MAX ((unsigned long)MAXULONG)
  1437. #  else
  1438. #    define PERL_ULONG_MAX       (~(unsigned long)0)
  1439. #  endif
  1440. #endif
  1441.  
  1442. #define PERL_ULONG_MIN ((unsigned long)0L)
  1443.  
  1444. #ifdef LONG_MAX
  1445. #  define PERL_LONG_MAX ((long)LONG_MAX)
  1446. #else
  1447. #  ifdef MAXLONG    /* Often used in <values.h> */
  1448. #    define PERL_LONG_MAX ((long)MAXLONG)
  1449. #  else
  1450. #    define PERL_LONG_MAX        ((long) (PERL_ULONG_MAX >> 1))
  1451. #  endif
  1452. #endif
  1453.  
  1454. #ifdef LONG_MIN
  1455. #  define PERL_LONG_MIN ((long)LONG_MIN)
  1456. #else
  1457. #  ifdef MINLONG
  1458. #    define PERL_LONG_MIN ((long)MINLONG)
  1459. #  else
  1460. #    define PERL_LONG_MIN        (-PERL_LONG_MAX - ((3 & -1) == 3))
  1461. #  endif
  1462. #endif
  1463.  
  1464. #ifdef UV_IS_QUAD
  1465.  
  1466. #    define PERL_UQUAD_MAX    (~(UV)0)
  1467. #    define PERL_UQUAD_MIN    ((UV)0)
  1468. #    define PERL_QUAD_MAX     ((IV) (PERL_UQUAD_MAX >> 1))
  1469. #    define PERL_QUAD_MIN     (-PERL_QUAD_MAX - ((3 & -1) == 3))
  1470.  
  1471. #endif
  1472.  
  1473. struct perl_mstats {
  1474.     UV *nfree;
  1475.     UV *ntotal;
  1476.     IV topbucket, topbucket_ev, topbucket_odd, totfree, total, total_chain;
  1477.     IV total_sbrk, sbrks, sbrk_good, sbrk_slack, start_slack, sbrked_remains;
  1478.     IV minbucket;
  1479.     /* Level 1 info */
  1480.     UV *bucket_mem_size;
  1481.     UV *bucket_available_size;
  1482.     UV nbuckets;
  1483. };
  1484.  
  1485. typedef MEM_SIZE STRLEN;
  1486.  
  1487. typedef struct op OP;
  1488. typedef struct cop COP;
  1489. typedef struct unop UNOP;
  1490. typedef struct binop BINOP;
  1491. typedef struct listop LISTOP;
  1492. typedef struct logop LOGOP;
  1493. typedef struct pmop PMOP;
  1494. typedef struct svop SVOP;
  1495. typedef struct padop PADOP;
  1496. typedef struct pvop PVOP;
  1497. typedef struct loop LOOP;
  1498.  
  1499. typedef struct interpreter PerlInterpreter;
  1500. #ifdef UTS
  1501. #   define STRUCT_SV perl_sv /* Amdahl's <ksync.h> has struct sv */
  1502. #else
  1503. #   define STRUCT_SV sv
  1504. #endif
  1505. typedef struct STRUCT_SV SV;
  1506. typedef struct av AV;
  1507. typedef struct hv HV;
  1508. typedef struct cv CV;
  1509. typedef struct regexp REGEXP;
  1510. typedef struct gp GP;
  1511. typedef struct gv GV;
  1512. typedef struct io IO;
  1513. typedef struct context PERL_CONTEXT;
  1514. typedef struct block BLOCK;
  1515.  
  1516. typedef struct magic MAGIC;
  1517. typedef struct xrv XRV;
  1518. typedef struct xpv XPV;
  1519. typedef struct xpviv XPVIV;
  1520. typedef struct xpvuv XPVUV;
  1521. typedef struct xpvnv XPVNV;
  1522. typedef struct xpvmg XPVMG;
  1523. typedef struct xpvlv XPVLV;
  1524. typedef struct xpvav XPVAV;
  1525. typedef struct xpvhv XPVHV;
  1526. typedef struct xpvgv XPVGV;
  1527. typedef struct xpvcv XPVCV;
  1528. typedef struct xpvbm XPVBM;
  1529. typedef struct xpvfm XPVFM;
  1530. typedef struct xpvio XPVIO;
  1531. typedef struct mgvtbl MGVTBL;
  1532. typedef union any ANY;
  1533. typedef struct ptr_tbl_ent PTR_TBL_ENT_t;
  1534. typedef struct ptr_tbl PTR_TBL_t;
  1535.  
  1536. #include "handy.h"
  1537.  
  1538. #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_RAWIO)
  1539. #   if LSEEKSIZE == 8 && !defined(USE_64_BIT_RAWIO)
  1540. #       define USE_64_BIT_RAWIO    /* implicit */
  1541. #   endif
  1542. #endif
  1543.  
  1544. /* Notice the use of HAS_FSEEKO: now we are obligated to always use
  1545.  * fseeko/ftello if possible.  Don't go #defining ftell to ftello yourself,
  1546.  * however, because operating systems like to do that themself. */
  1547. #ifndef FSEEKSIZE
  1548. #   ifdef HAS_FSEEKO
  1549. #       define FSEEKSIZE LSEEKSIZE
  1550. #   else
  1551. #       define FSEEKSIZE LONGSIZE
  1552. #   endif  
  1553. #endif
  1554.  
  1555. #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO)
  1556. #   if FSEEKSIZE == 8 && !defined(USE_64_BIT_STDIO)
  1557. #       define USE_64_BIT_STDIO /* implicit */
  1558. #   endif
  1559. #endif
  1560.  
  1561. #ifdef USE_64_BIT_RAWIO
  1562. #   ifdef HAS_OFF64_T
  1563. #       undef Off_t
  1564. #       define Off_t off64_t
  1565. #       undef LSEEKSIZE
  1566. #       define LSEEKSIZE 8
  1567. #   endif
  1568. /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
  1569.  * will trigger defines like the ones below.  Some 64-bit environments,
  1570.  * however, do not.  Therefore we have to explicitly mix and match. */
  1571. #   if defined(USE_OPEN64)
  1572. #       define open open64
  1573. #   endif
  1574. #   if defined(USE_LSEEK64)
  1575. #       define lseek lseek64
  1576. #   else
  1577. #       if defined(USE_LLSEEK)
  1578. #           define lseek llseek
  1579. #       endif
  1580. #   endif
  1581. #   if defined(USE_STAT64)
  1582. #       define stat stat64
  1583. #   endif
  1584. #   if defined(USE_FSTAT64)
  1585. #       define fstat fstat64
  1586. #   endif
  1587. #   if defined(USE_LSTAT64)
  1588. #       define lstat lstat64
  1589. #   endif
  1590. #   if defined(USE_FLOCK64)
  1591. #       define flock flock64
  1592. #   endif
  1593. #   if defined(USE_LOCKF64)
  1594. #       define lockf lockf64
  1595. #   endif
  1596. #   if defined(USE_FCNTL64)
  1597. #       define fcntl fcntl64
  1598. #   endif
  1599. #   if defined(USE_TRUNCATE64)
  1600. #       define truncate truncate64
  1601. #   endif
  1602. #   if defined(USE_FTRUNCATE64)
  1603. #       define ftruncate ftruncate64
  1604. #   endif
  1605. #endif
  1606.  
  1607. #ifdef USE_64_BIT_STDIO
  1608. #   ifdef HAS_FPOS64_T
  1609. #       undef Fpos_t
  1610. #       define Fpos_t fpos64_t
  1611. #   endif
  1612. /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
  1613.  * will trigger defines like the ones below.  Some 64-bit environments,
  1614.  * however, do not. */
  1615. #   if defined(USE_FOPEN64)
  1616. #       define fopen fopen64
  1617. #   endif
  1618. #   if defined(USE_FSEEK64)
  1619. #       define fseek fseek64 /* don't do fseeko here, see perlio.c */
  1620. #   endif
  1621. #   if defined(USE_FTELL64)
  1622. #       define ftell ftell64 /* don't do ftello here, see perlio.c */
  1623. #   endif
  1624. #   if defined(USE_FSETPOS64)
  1625. #       define fsetpos fsetpos64
  1626. #   endif
  1627. #   if defined(USE_FGETPOS64)
  1628. #       define fgetpos fgetpos64
  1629. #   endif
  1630. #   if defined(USE_TMPFILE64)
  1631. #       define tmpfile tmpfile64
  1632. #   endif
  1633. #   if defined(USE_FREOPEN64)
  1634. #       define freopen freopen64
  1635. #   endif
  1636. #endif
  1637.  
  1638. #if defined(OS2)
  1639. #  include "iperlsys.h"
  1640. #endif
  1641.  
  1642. #if defined(__OPEN_VM)
  1643. # include "vmesa/vmesaish.h"
  1644. #endif
  1645.  
  1646. #ifdef DOSISH
  1647. # if defined(OS2)
  1648. #   include "os2ish.h"
  1649. # else
  1650. #   include "dosish.h"
  1651. # endif
  1652. #else
  1653. # if defined(VMS)
  1654. #   include "vmsish.h"
  1655. # else
  1656. #   if defined(PLAN9)
  1657. #     include "./plan9/plan9ish.h"
  1658. #   else
  1659. #     if defined(MPE)
  1660. #       include "mpeix/mpeixish.h"
  1661. #     else
  1662. #       if defined(__VOS__)
  1663. #         include "vosish.h"
  1664. #       else
  1665. #         if defined(EPOC)
  1666. #           include "epocish.h"
  1667. #         else
  1668. #           if defined(MACOS_TRADITIONAL)
  1669. #             include "macos/macish.h"
  1670. #          ifndef NO_ENVIRON_ARRAY
  1671. #               define NO_ENVIRON_ARRAY
  1672. #             endif
  1673. #           else
  1674. #             include "unixish.h"
  1675. #           endif
  1676. #         endif
  1677. #       endif
  1678. #     endif
  1679. #   endif
  1680. # endif
  1681. #endif
  1682.  
  1683. #ifndef NO_ENVIRON_ARRAY
  1684. #  define USE_ENVIRON_ARRAY
  1685. #endif
  1686.  
  1687. #ifndef PERL_SYS_INIT3
  1688. #  define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
  1689. #endif
  1690.  
  1691. #ifndef MAXPATHLEN
  1692. #  ifdef PATH_MAX
  1693. #    ifdef _POSIX_PATH_MAX
  1694. #       if PATH_MAX > _POSIX_PATH_MAX
  1695. /* MAXPATHLEN is supposed to include the final null character,
  1696.  * as opposed to PATH_MAX and _POSIX_PATH_MAX. */
  1697. #         define MAXPATHLEN (PATH_MAX+1)
  1698. #       else
  1699. #         define MAXPATHLEN (_POSIX_PATH_MAX+1)
  1700. #       endif
  1701. #    else
  1702. #      define MAXPATHLEN (PATH_MAX+1)
  1703. #    endif
  1704. #  else
  1705. #    ifdef _POSIX_PATH_MAX
  1706. #       define MAXPATHLEN (_POSIX_PATH_MAX+1)
  1707. #    else
  1708. #       define MAXPATHLEN 1024    /* Err on the large side. */
  1709. #    endif
  1710. #  endif
  1711. #endif
  1712.  
  1713. /* 
  1714.  * USE_THREADS needs to be after unixish.h as <pthread.h> includes
  1715.  * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
  1716.  * this results in many functions being undeclared which bothers C++
  1717.  * May make sense to have threads after "*ish.h" anyway
  1718.  */
  1719.  
  1720. #if defined(USE_THREADS) || defined(USE_ITHREADS)
  1721. #  if defined(USE_THREADS)
  1722.    /* pending resolution of licensing issues, we avoid the erstwhile
  1723.     * atomic.h everywhere */
  1724. #  define EMULATE_ATOMIC_REFCOUNTS
  1725. #  endif
  1726. #  ifdef FAKE_THREADS
  1727. #    include "fakethr.h"
  1728. #  else
  1729. #    ifdef WIN32
  1730. #      include <win32thread.h>
  1731. #    else
  1732. #      ifdef OS2
  1733. #        include "os2thread.h"
  1734. #      else
  1735. #        ifdef I_MACH_CTHREADS
  1736. #          include <mach/cthreads.h>
  1737. #          if (defined(NeXT) || defined(__NeXT__)) && defined(PERL_POLLUTE_MALLOC)
  1738. #            define MUTEX_INIT_CALLS_MALLOC
  1739. #          endif
  1740. typedef cthread_t    perl_os_thread;
  1741. typedef mutex_t        perl_mutex;
  1742. typedef condition_t    perl_cond;
  1743. typedef void *        perl_key;
  1744. #        else /* Posix threads */
  1745. #          ifdef I_PTHREAD
  1746. #            include <pthread.h>
  1747. #          endif
  1748. typedef pthread_t    perl_os_thread;
  1749. typedef pthread_mutex_t    perl_mutex;
  1750. typedef pthread_cond_t    perl_cond;
  1751. typedef pthread_key_t    perl_key;
  1752. #        endif /* I_MACH_CTHREADS */
  1753. #      endif /* OS2 */
  1754. #    endif /* WIN32 */
  1755. #  endif /* FAKE_THREADS */
  1756. #endif /* USE_THREADS || USE_ITHREADS */
  1757.  
  1758. #ifdef WIN32
  1759. #  include "win32.h"
  1760. #endif
  1761.  
  1762. #ifdef VMS
  1763. #   define STATUS_NATIVE    PL_statusvalue_vms
  1764. #   define STATUS_NATIVE_EXPORT \
  1765.     (((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ? 0x10000000 : 0))
  1766. #   define STATUS_NATIVE_SET(n)                        \
  1767.     STMT_START {                            \
  1768.         PL_statusvalue_vms = (n);                    \
  1769.         if ((I32)PL_statusvalue_vms == -1)                \
  1770.         PL_statusvalue = -1;                    \
  1771.         else if (PL_statusvalue_vms & STS$M_SUCCESS)        \
  1772.         PL_statusvalue = 0;                    \
  1773.         else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0)    \
  1774.         PL_statusvalue = 1 << 8;                \
  1775.         else                            \
  1776.         PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8;    \
  1777.     } STMT_END
  1778. #   define STATUS_POSIX    PL_statusvalue
  1779. #   ifdef VMSISH_STATUS
  1780. #    define STATUS_CURRENT    (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
  1781. #   else
  1782. #    define STATUS_CURRENT    STATUS_POSIX
  1783. #   endif
  1784. #   define STATUS_POSIX_SET(n)                \
  1785.     STMT_START {                    \
  1786.         PL_statusvalue = (n);                \
  1787.         if (PL_statusvalue != -1) {            \
  1788.         PL_statusvalue &= 0xFFFF;            \
  1789.         PL_statusvalue_vms = PL_statusvalue ? 44 : 1;    \
  1790.         }                        \
  1791.         else PL_statusvalue_vms = -1;            \
  1792.     } STMT_END
  1793. #   define STATUS_ALL_SUCCESS    (PL_statusvalue = 0, PL_statusvalue_vms = 1)
  1794. #   define STATUS_ALL_FAILURE    (PL_statusvalue = 1, PL_statusvalue_vms = 44)
  1795. #else
  1796. #   define STATUS_NATIVE    STATUS_POSIX
  1797. #   define STATUS_NATIVE_EXPORT    STATUS_POSIX
  1798. #   define STATUS_NATIVE_SET    STATUS_POSIX_SET
  1799. #   define STATUS_POSIX        PL_statusvalue
  1800. #   define STATUS_POSIX_SET(n)        \
  1801.     STMT_START {            \
  1802.         PL_statusvalue = (n);        \
  1803.         if (PL_statusvalue != -1)    \
  1804.         PL_statusvalue &= 0xFFFF;    \
  1805.     } STMT_END
  1806. #   define STATUS_CURRENT STATUS_POSIX
  1807. #   define STATUS_ALL_SUCCESS    (PL_statusvalue = 0)
  1808. #   define STATUS_ALL_FAILURE    (PL_statusvalue = 1)
  1809. #endif
  1810.  
  1811. /* flags in PL_exit_flags for nature of exit() */
  1812. #define PERL_EXIT_EXPECTED    0x01
  1813.  
  1814. #ifndef MEMBER_TO_FPTR
  1815. #  define MEMBER_TO_FPTR(name)        name
  1816. #endif
  1817.  
  1818. /* format to use for version numbers in file/directory names */
  1819. /* XXX move to Configure? */
  1820. #ifndef PERL_FS_VER_FMT
  1821. #  define PERL_FS_VER_FMT    "%d.%d.%d"
  1822. #endif
  1823.  
  1824. /* This defines a way to flush all output buffers.  This may be a
  1825.  * performance issue, so we allow people to disable it.
  1826.  */
  1827. #ifndef PERL_FLUSHALL_FOR_CHILD
  1828. # if defined(FFLUSH_NULL) || defined(USE_SFIO)
  1829. #  define PERL_FLUSHALL_FOR_CHILD    PerlIO_flush((PerlIO*)NULL)
  1830. # else
  1831. #  ifdef FFLUSH_ALL
  1832. #   define PERL_FLUSHALL_FOR_CHILD    my_fflush_all()
  1833. #  else
  1834. #   define PERL_FLUSHALL_FOR_CHILD    NOOP
  1835. #  endif
  1836. # endif
  1837. #endif
  1838.  
  1839. #ifndef PERL_WAIT_FOR_CHILDREN
  1840. #  define PERL_WAIT_FOR_CHILDREN    NOOP
  1841. #endif
  1842.  
  1843. /* the traditional thread-unsafe notion of "current interpreter". */
  1844. #ifndef PERL_SET_INTERP
  1845. #  define PERL_SET_INTERP(i)        (PL_curinterp = (PerlInterpreter*)(i))
  1846. #endif
  1847.  
  1848. #ifndef PERL_GET_INTERP
  1849. #  define PERL_GET_INTERP        (PL_curinterp)
  1850. #endif
  1851.  
  1852. #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX)
  1853. #  ifdef USE_THREADS
  1854. #    define PERL_GET_THX        ((struct perl_thread *)PERL_GET_CONTEXT)
  1855. #  else
  1856. #  ifdef MULTIPLICITY
  1857. #    define PERL_GET_THX        ((PerlInterpreter *)PERL_GET_CONTEXT)
  1858. #  else
  1859. #  ifdef PERL_OBJECT
  1860. #    define PERL_GET_THX        ((CPerlObj *)PERL_GET_CONTEXT)
  1861. #  endif
  1862. #  endif
  1863. #  endif
  1864. #  define PERL_SET_THX(t)        PERL_SET_CONTEXT(t)
  1865. #endif
  1866.  
  1867. #ifndef SVf
  1868. #  ifdef CHECK_FORMAT
  1869. #    define SVf "p"
  1870. #  else
  1871. #    define SVf "_"
  1872. #  endif 
  1873. #endif
  1874.  
  1875. #ifndef UVf
  1876. #  ifdef CHECK_FORMAT
  1877. #    define UVf UVuf
  1878. #  else
  1879. #    define UVf "Vu"
  1880. #  endif 
  1881. #endif
  1882.  
  1883. #ifndef VDf
  1884. #  ifdef CHECK_FORMAT
  1885. #    define VDf "p"
  1886. #  else
  1887. #    define VDf "vd"
  1888. #  endif 
  1889. #endif
  1890.  
  1891. /* Some unistd.h's give a prototype for pause() even though
  1892.    HAS_PAUSE ends up undefined.  This causes the #define
  1893.    below to be rejected by the compiler.  Sigh.
  1894. */
  1895. #ifdef HAS_PAUSE
  1896. #define Pause    pause
  1897. #else
  1898. #define Pause() sleep((32767<<16)+32767)
  1899. #endif
  1900.  
  1901. #ifndef IOCPARM_LEN
  1902. #   ifdef IOCPARM_MASK
  1903.     /* on BSDish systes we're safe */
  1904. #    define IOCPARM_LEN(x)  (((x) >> 16) & IOCPARM_MASK)
  1905. #   else
  1906.     /* otherwise guess at what's safe */
  1907. #    define IOCPARM_LEN(x)    256
  1908. #   endif
  1909. #endif
  1910.  
  1911. #if defined(__CYGWIN__)
  1912. /* USEMYBINMODE
  1913.  *   This symbol, if defined, indicates that the program should
  1914.  *   use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
  1915.  *   that a file is in "binary" mode -- that is, that no translation
  1916.  *   of bytes occurs on read or write operations.
  1917.  */
  1918. #  define USEMYBINMODE / **/
  1919. #  define my_binmode(fp, iotype, mode) \
  1920.             (PerlLIO_setmode(PerlIO_fileno(fp), mode) != -1 ? TRUE : FALSE)
  1921. #endif
  1922.  
  1923. #ifdef UNION_ANY_DEFINITION
  1924. UNION_ANY_DEFINITION;
  1925. #else
  1926. union any {
  1927.     void*    any_ptr;
  1928.     I32        any_i32;
  1929.     IV        any_iv;
  1930.     long    any_long;
  1931.     void    (*any_dptr) (void*);
  1932.     void    (*any_dxptr) (pTHXo_ void*);
  1933. };
  1934. #endif
  1935.  
  1936. #ifdef USE_THREADS
  1937. #define ARGSproto struct perl_thread *thr
  1938. #else
  1939. #define ARGSproto
  1940. #endif /* USE_THREADS */
  1941.  
  1942. typedef I32 (*filter_t) (pTHXo_ int, SV *, int);
  1943.  
  1944. #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
  1945. #define FILTER_DATA(idx)       (AvARRAY(PL_rsfp_filters)[idx])
  1946. #define FILTER_ISREADER(idx)       (idx >= AvFILLp(PL_rsfp_filters))
  1947.  
  1948. #if !defined(OS2)
  1949. #  include "iperlsys.h"
  1950. #endif
  1951. #include "regexp.h"
  1952. #include "sv.h"
  1953. #include "util.h"
  1954. #include "form.h"
  1955. #include "gv.h"
  1956. #include "cv.h"
  1957. #include "opnames.h"
  1958. #include "op.h"
  1959. #include "cop.h"
  1960. #include "av.h"
  1961. #include "hv.h"
  1962. #include "mg.h"
  1963. #include "scope.h"
  1964. #include "warnings.h"
  1965. #include "utf8.h"
  1966.  
  1967. /* Current curly descriptor */
  1968. typedef struct curcur CURCUR;
  1969. struct curcur {
  1970.     int        parenfloor;    /* how far back to strip paren data */
  1971.     int        cur;        /* how many instances of scan we've matched */
  1972.     int        min;        /* the minimal number of scans to match */
  1973.     int        max;        /* the maximal number of scans to match */
  1974.     int        minmod;        /* whether to work our way up or down */
  1975.     regnode *    scan;        /* the thing to match */
  1976.     regnode *    next;        /* what has to match after it */
  1977.     char *    lastloc;    /* where we started matching this scan */
  1978.     CURCUR *    oldcc;        /* current curly before we started this one */
  1979. };
  1980.  
  1981. typedef struct _sublex_info SUBLEXINFO;
  1982. struct _sublex_info {
  1983.     I32 super_state;    /* lexer state to save */
  1984.     I32 sub_inwhat;    /* "lex_inwhat" to use */
  1985.     OP *sub_op;        /* "lex_op" to use */
  1986.     char *super_bufptr;    /* PL_bufptr that was */
  1987.     char *super_bufend;    /* PL_bufend that was */
  1988. };
  1989.  
  1990. typedef struct magic_state MGS;    /* struct magic_state defined in mg.c */
  1991.  
  1992. struct scan_data_t;        /* Used in S_* functions in regcomp.c */
  1993. struct regnode_charclass_class;    /* Used in S_* functions in regcomp.c */
  1994.  
  1995. typedef I32 CHECKPOINT;
  1996.  
  1997. struct ptr_tbl_ent {
  1998.     struct ptr_tbl_ent*        next;
  1999.     void*            oldval;
  2000.     void*            newval;
  2001. };
  2002.  
  2003. struct ptr_tbl {
  2004.     struct ptr_tbl_ent**    tbl_ary;
  2005.     UV                tbl_max;
  2006.     UV                tbl_items;
  2007. };
  2008.  
  2009. #if defined(iAPX286) || defined(M_I286) || defined(I80286)
  2010. #   define I286
  2011. #endif
  2012.  
  2013. #if defined(htonl) && !defined(HAS_HTONL)
  2014. #define HAS_HTONL
  2015. #endif
  2016. #if defined(htons) && !defined(HAS_HTONS)
  2017. #define HAS_HTONS
  2018. #endif
  2019. #if defined(ntohl) && !defined(HAS_NTOHL)
  2020. #define HAS_NTOHL
  2021. #endif
  2022. #if defined(ntohs) && !defined(HAS_NTOHS)
  2023. #define HAS_NTOHS
  2024. #endif
  2025. #ifndef HAS_HTONL
  2026. #if (BYTEORDER & 0xffff) != 0x4321
  2027. #define HAS_HTONS
  2028. #define HAS_HTONL
  2029. #define HAS_NTOHS
  2030. #define HAS_NTOHL
  2031. #define MYSWAP
  2032. #define htons my_swap
  2033. #define htonl my_htonl
  2034. #define ntohs my_swap
  2035. #define ntohl my_ntohl
  2036. #endif
  2037. #else
  2038. #if (BYTEORDER & 0xffff) == 0x4321
  2039. #undef HAS_HTONS
  2040. #undef HAS_HTONL
  2041. #undef HAS_NTOHS
  2042. #undef HAS_NTOHL
  2043. #endif
  2044. #endif
  2045.  
  2046. /*
  2047.  * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
  2048.  * -DWS
  2049.  */
  2050. #if BYTEORDER != 0x1234
  2051. # define HAS_VTOHL
  2052. # define HAS_VTOHS
  2053. # define HAS_HTOVL
  2054. # define HAS_HTOVS
  2055. # if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
  2056. #  define vtohl(x)    ((((x)&0xFF)<<24)    \
  2057.             +(((x)>>24)&0xFF)    \
  2058.             +(((x)&0x0000FF00)<<8)    \
  2059.             +(((x)&0x00FF0000)>>8)    )
  2060. #  define vtohs(x)    ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
  2061. #  define htovl(x)    vtohl(x)
  2062. #  define htovs(x)    vtohs(x)
  2063. # endif
  2064.     /* otherwise default to functions in util.c */
  2065. #endif
  2066.  
  2067. #ifdef CASTNEGFLOAT
  2068. #define U_S(what) ((U16)(what))
  2069. #define U_I(what) ((unsigned int)(what))
  2070. #define U_L(what) ((U32)(what))
  2071. #else
  2072. #define U_S(what) ((U16)cast_ulong((NV)(what)))
  2073. #define U_I(what) ((unsigned int)cast_ulong((NV)(what)))
  2074. #define U_L(what) (cast_ulong((NV)(what)))
  2075. #endif
  2076.  
  2077. #ifdef CASTI32
  2078. #define I_32(what) ((I32)(what))
  2079. #define I_V(what) ((IV)(what))
  2080. #define U_V(what) ((UV)(what))
  2081. #else
  2082. #define I_32(what) (cast_i32((NV)(what)))
  2083. #define I_V(what) (cast_iv((NV)(what)))
  2084. #define U_V(what) (cast_uv((NV)(what)))
  2085. #endif
  2086.  
  2087. /* These do not care about the fractional part, only about the range. */
  2088. #define NV_WITHIN_IV(nv) (I_V(nv) >= IV_MIN && I_V(nv) <= IV_MAX)
  2089. #define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX)
  2090.  
  2091. /* Used with UV/IV arguments: */
  2092.                     /* XXXX: need to speed it up */
  2093. #define CLUMP_2UV(iv)    ((iv) < 0 ? 0 : (UV)(iv))
  2094. #define CLUMP_2IV(uv)    ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv))
  2095.  
  2096. #ifndef MAXSYSFD
  2097. #   define MAXSYSFD 2
  2098. #endif
  2099.  
  2100. #ifndef __cplusplus
  2101. Uid_t getuid (void);
  2102. Uid_t geteuid (void);
  2103. Gid_t getgid (void);
  2104. Gid_t getegid (void);
  2105. #endif
  2106.  
  2107. #ifndef Perl_debug_log
  2108. #  define Perl_debug_log    PerlIO_stderr()
  2109. #endif
  2110.  
  2111. #ifndef Perl_error_log
  2112. #  define Perl_error_log    (PL_stderrgv            \
  2113.                  && GvIOp(PL_stderrgv)          \
  2114.                  && IoOFP(GvIOp(PL_stderrgv))    \
  2115.                  ? IoOFP(GvIOp(PL_stderrgv))    \
  2116.                  : PerlIO_stderr())
  2117. #endif
  2118.  
  2119. #ifdef DEBUGGING
  2120. #undef  YYDEBUG
  2121. #define YYDEBUG 1
  2122. #define DEB(a)                 a
  2123. #define DEBUG(a)   if (PL_debug)        a
  2124. #define DEBUG_p(a) if (PL_debug & 1)    a
  2125. #define DEBUG_s(a) if (PL_debug & 2)    a
  2126. #define DEBUG_l(a) if (PL_debug & 4)    a
  2127. #define DEBUG_t(a) if (PL_debug & 8)    a
  2128. #define DEBUG_o(a) if (PL_debug & 16)    a
  2129. #define DEBUG_c(a) if (PL_debug & 32)    a
  2130. #define DEBUG_P(a) if (PL_debug & 64)    a
  2131. #  if defined(PERL_OBJECT)
  2132. #    define DEBUG_m(a) if (PL_debug & 128)    a
  2133. #  else
  2134.      /* Temporarily turn off memory debugging in case the a
  2135.       * does memory allocation, either directly or indirectly. */
  2136. #    define DEBUG_m(a)  \
  2137.     STMT_START {                            \
  2138.         if (PERL_GET_INTERP) { dTHX; if (PL_debug & 128) {PL_debug&=~128; a; PL_debug|=128;} } \
  2139.     } STMT_END
  2140. #  endif
  2141. #define DEBUG_f(a) if (PL_debug & 256)    a
  2142. #define DEBUG_r(a) if (PL_debug & 512)    a
  2143. #define DEBUG_x(a) if (PL_debug & 1024)    a
  2144. #define DEBUG_u(a) if (PL_debug & 2048)    a
  2145. #define DEBUG_L(a) if (PL_debug & 4096)    a
  2146. #define DEBUG_H(a) if (PL_debug & 8192)    a
  2147. #define DEBUG_X(a) if (PL_debug & 16384)    a
  2148. #define DEBUG_D(a) if (PL_debug & 32768)    a
  2149. #  ifdef USE_THREADS
  2150. #    define DEBUG_S(a) if (PL_debug & (1<<16))    a
  2151. #  else
  2152. #    define DEBUG_S(a)
  2153. #  endif
  2154. #define DEBUG_T(a) if (PL_debug & (1<<17))    a
  2155. #else
  2156. #define DEB(a)
  2157. #define DEBUG(a)
  2158. #define DEBUG_p(a)
  2159. #define DEBUG_s(a)
  2160. #define DEBUG_l(a)
  2161. #define DEBUG_t(a)
  2162. #define DEBUG_o(a)
  2163. #define DEBUG_c(a)
  2164. #define DEBUG_P(a)
  2165. #define DEBUG_m(a)
  2166. #define DEBUG_f(a)
  2167. #define DEBUG_r(a)
  2168. #define DEBUG_x(a)
  2169. #define DEBUG_u(a)
  2170. #define DEBUG_S(a)
  2171. #define DEBUG_H(a)
  2172. #define DEBUG_X(a)
  2173. #define DEBUG_D(a)
  2174. #define DEBUG_S(a)
  2175. #define DEBUG_T(a)
  2176. #endif
  2177. #define YYMAXDEPTH 300
  2178.  
  2179. #ifndef assert  /* <assert.h> might have been included somehow */
  2180. #define assert(what)    DEB( {                        \
  2181.     if (!(what)) {                            \
  2182.         Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d",    \
  2183.         __FILE__, __LINE__);                    \
  2184.         PerlProc_exit(1);                        \
  2185.     }})
  2186. #endif
  2187.  
  2188. struct ufuncs {
  2189.     I32 (*uf_val)(IV, SV*);
  2190.     I32 (*uf_set)(IV, SV*);
  2191.     IV uf_index;
  2192. };
  2193.  
  2194. /* Fix these up for __STDC__ */
  2195. #ifndef DONT_DECLARE_STD
  2196. char *mktemp (char*);
  2197. #ifndef atof
  2198. double atof (const char*);
  2199. #endif
  2200. #endif
  2201.  
  2202. #ifndef STANDARD_C
  2203. /* All of these are in stdlib.h or time.h for ANSI C */
  2204. Time_t time();
  2205. struct tm *gmtime(), *localtime();
  2206. #if defined(OEMVS) || defined(__OPEN_VM)
  2207. char *(strchr)(), *(strrchr)();
  2208. char *(strcpy)(), *(strcat)();
  2209. #else
  2210. char *strchr(), *strrchr();
  2211. char *strcpy(), *strcat();
  2212. #endif
  2213. #endif /* ! STANDARD_C */
  2214.  
  2215.  
  2216. #ifdef I_MATH
  2217. #    include <math.h>
  2218. #else
  2219. START_EXTERN_C
  2220.         double exp (double);
  2221.         double log (double);
  2222.         double log10 (double);
  2223.         double sqrt (double);
  2224.         double frexp (double,int*);
  2225.         double ldexp (double,int);
  2226.         double modf (double,double*);
  2227.         double sin (double);
  2228.         double cos (double);
  2229.         double atan2 (double,double);
  2230.         double pow (double,double);
  2231. END_EXTERN_C
  2232. #endif
  2233.  
  2234. #ifndef __cplusplus
  2235. #  if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */
  2236. char *crypt ();       /* Maybe more hosts will need the unprototyped version */
  2237. #  else
  2238. #    if !defined(WIN32)
  2239. char *crypt (const char*, const char*);
  2240. #    endif /* !WIN32 */
  2241. #  endif /* !NeXT && !__NeXT__ */
  2242. #  ifndef DONT_DECLARE_STD
  2243. #    ifndef getenv
  2244. char *getenv (const char*);
  2245. #    endif /* !getenv */
  2246. #    if !defined(HAS_LSEEK_PROTO) && !defined(EPOC) && !defined(__hpux)
  2247. #      ifdef _FILE_OFFSET_BITS
  2248. #        if _FILE_OFFSET_BITS == 64
  2249. Off_t lseek (int,Off_t,int);
  2250. #        endif
  2251. #      endif
  2252. #    endif
  2253. #  endif /* !DONT_DECLARE_STD */
  2254. char *getlogin (void);
  2255. #endif /* !__cplusplus */
  2256.  
  2257. #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
  2258. #define UNLINK unlnk
  2259. I32 unlnk (char*);
  2260. #else
  2261. #define UNLINK PerlLIO_unlink
  2262. #endif
  2263.  
  2264. #ifndef HAS_SETREUID
  2265. #  ifdef HAS_SETRESUID
  2266. #    define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
  2267. #    define HAS_SETREUID
  2268. #  endif
  2269. #endif
  2270. #ifndef HAS_SETREGID
  2271. #  ifdef HAS_SETRESGID
  2272. #    define setregid(r,e) setresgid(r,e,(Gid_t)-1)
  2273. #    define HAS_SETREGID
  2274. #  endif
  2275. #endif
  2276.  
  2277. /* Sighandler_t defined in iperlsys.h */
  2278.  
  2279. #ifdef HAS_SIGACTION
  2280. typedef struct sigaction Sigsave_t;
  2281. #else
  2282. typedef Sighandler_t Sigsave_t;
  2283. #endif
  2284.  
  2285. #define SCAN_DEF 0
  2286. #define SCAN_TR 1
  2287. #define SCAN_REPL 2
  2288.  
  2289. #ifdef DEBUGGING
  2290. # ifndef register
  2291. #  define register
  2292. # endif
  2293. # define PAD_SV(po) pad_sv(po)
  2294. # define RUNOPS_DEFAULT Perl_runops_debug
  2295. #else
  2296. # define PAD_SV(po) PL_curpad[po]
  2297. # define RUNOPS_DEFAULT Perl_runops_standard
  2298. #endif
  2299.  
  2300. #ifdef MYMALLOC
  2301. #  ifdef MUTEX_INIT_CALLS_MALLOC
  2302. #    define MALLOC_INIT                    \
  2303.     STMT_START {                    \
  2304.         PL_malloc_mutex = NULL;            \
  2305.         MUTEX_INIT(&PL_malloc_mutex);        \
  2306.     } STMT_END
  2307. #    define MALLOC_TERM                    \
  2308.     STMT_START {                    \
  2309.         perl_mutex tmp = PL_malloc_mutex;    \
  2310.         PL_malloc_mutex = NULL;            \
  2311.         MUTEX_DESTROY(&tmp);            \
  2312.     } STMT_END
  2313. #  else
  2314. #    define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
  2315. #    define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
  2316. #  endif
  2317. #else
  2318. #  define MALLOC_INIT
  2319. #  define MALLOC_TERM
  2320. #endif
  2321.  
  2322.  
  2323. typedef int (CPERLscope(*runops_proc_t)) (pTHX);
  2324. typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX);
  2325.  
  2326. /* _ (for $_) must be first in the following list (DEFSV requires it) */
  2327. #define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@"
  2328.  
  2329. /* NeXT has problems with crt0.o globals */
  2330. #if defined(__DYNAMIC__) && \
  2331.     (defined(NeXT) || defined(__NeXT__) || defined(__APPLE__))
  2332. #  if defined(NeXT) || defined(__NeXT)
  2333. #    include <mach-o/dyld.h>
  2334. #    define environ (*environ_pointer)
  2335. EXT char *** environ_pointer;
  2336. #  else
  2337. #    if defined(__APPLE__) && defined(PERL_CORE)
  2338. #      include <crt_externs.h>    /* for the env array */
  2339. #      define environ (*_NSGetEnviron())
  2340. #    endif
  2341. #  endif
  2342. #else
  2343.    /* VMS and some other platforms don't use the environ array */
  2344. #  ifdef USE_ENVIRON_ARRAY
  2345. #    if !defined(DONT_DECLARE_STD) || \
  2346.         (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
  2347.         defined(__sgi) || \
  2348.         defined(__DGUX) 
  2349. extern char **    environ;    /* environment variables supplied via exec */
  2350. #    endif
  2351. #  endif
  2352. #endif
  2353.  
  2354. START_EXTERN_C
  2355.  
  2356. /* handy constants */
  2357. EXTCONST char PL_warn_uninit[]
  2358.   INIT("Use of uninitialized value%s%s");
  2359. EXTCONST char PL_warn_nosemi[]
  2360.   INIT("Semicolon seems to be missing");
  2361. EXTCONST char PL_warn_reserved[]
  2362.   INIT("Unquoted string \"%s\" may clash with future reserved word");
  2363. EXTCONST char PL_warn_nl[]
  2364.   INIT("Unsuccessful %s on filename containing newline");
  2365. EXTCONST char PL_no_wrongref[]
  2366.   INIT("Can't use %s ref as %s ref");
  2367. EXTCONST char PL_no_symref[]
  2368.   INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
  2369. EXTCONST char PL_no_usym[]
  2370.   INIT("Can't use an undefined value as %s reference");
  2371. EXTCONST char PL_no_aelem[]
  2372.   INIT("Modification of non-creatable array value attempted, subscript %d");
  2373. EXTCONST char PL_no_helem[]
  2374.   INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
  2375. EXTCONST char PL_no_modify[]
  2376.   INIT("Modification of a read-only value attempted");
  2377. EXTCONST char PL_no_mem[]
  2378.   INIT("Out of memory!\n");
  2379. EXTCONST char PL_no_security[]
  2380.   INIT("Insecure dependency in %s%s");
  2381. EXTCONST char PL_no_sock_func[]
  2382.   INIT("Unsupported socket function \"%s\" called");
  2383. EXTCONST char PL_no_dir_func[]
  2384.   INIT("Unsupported directory function \"%s\" called");
  2385. EXTCONST char PL_no_func[]
  2386.   INIT("The %s function is unimplemented");
  2387. EXTCONST char PL_no_myglob[]
  2388.   INIT("\"my\" variable %s can't be in a package");
  2389.  
  2390. EXTCONST char PL_uuemap[65]
  2391.   INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_");
  2392.  
  2393.  
  2394. #ifdef DOINIT
  2395. EXT char *PL_sig_name[] = { SIG_NAME };
  2396. EXT int   PL_sig_num[]  = { SIG_NUM };
  2397. #else
  2398. EXT char *PL_sig_name[];
  2399. EXT int   PL_sig_num[];
  2400. #endif
  2401.  
  2402. /* fast case folding tables */
  2403.  
  2404. #ifdef DOINIT
  2405. #ifdef EBCDIC
  2406. EXT unsigned char PL_fold[] = { /* fast EBCDIC case folding table */
  2407.     0,      1,      2,      3,      4,      5,      6,      7,
  2408.     8,      9,      10,     11,     12,     13,     14,     15,
  2409.     16,     17,     18,     19,     20,     21,     22,     23,
  2410.     24,     25,     26,     27,     28,     29,     30,     31,
  2411.     32,     33,     34,     35,     36,     37,     38,     39,
  2412.     40,     41,     42,     43,     44,     45,     46,     47,
  2413.     48,     49,     50,     51,     52,     53,     54,     55,
  2414.     56,     57,     58,     59,     60,     61,     62,     63,
  2415.     64,     65,     66,     67,     68,     69,     70,     71,
  2416.     72,     73,     74,     75,     76,     77,     78,     79,
  2417.     80,     81,     82,     83,     84,     85,     86,     87,
  2418.     88,     89,     90,     91,     92,     93,     94,     95,
  2419.     96,     97,     98,     99,     100,    101,    102,    103,
  2420.     104,    105,    106,    107,    108,    109,    110,    111,
  2421.     112,    113,    114,    115,    116,    117,    118,    119,
  2422.     120,    121,    122,    123,    124,    125,    126,    127,
  2423.     128,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  2424.     'H',    'I',    138,    139,    140,    141,    142,    143,
  2425.     144,    'J',    'K',    'L',    'M',    'N',    'O',    'P',
  2426.     'Q',    'R',    154,    155,    156,    157,    158,    159,
  2427.     160,    161,    'S',    'T',    'U',    'V',    'W',    'X',
  2428.     'Y',    'Z',    170,    171,    172,    173,    174,    175,
  2429.     176,    177,    178,    179,    180,    181,    182,    183,
  2430.     184,    185,    186,    187,    188,    189,    190,    191,
  2431.     192,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  2432.     'h',    'i',    202,    203,    204,    205,    206,    207,
  2433.     208,    'j',    'k',    'l',    'm',    'n',    'o',    'p',
  2434.     'q',    'r',    218,    219,    220,    221,    222,    223,
  2435.     224,    225,    's',    't',    'u',    'v',    'w',    'x',
  2436.     'y',    'z',    234,    235,    236,    237,    238,    239,
  2437.     240,    241,    242,    243,    244,    245,    246,    247,
  2438.     248,    249,    250,    251,    252,    253,    254,    255
  2439. };
  2440. #else   /* ascii rather than ebcdic */
  2441. EXTCONST  unsigned char PL_fold[] = {
  2442.     0,    1,    2,    3,    4,    5,    6,    7,
  2443.     8,    9,    10,    11,    12,    13,    14,    15,
  2444.     16,    17,    18,    19,    20,    21,    22,    23,
  2445.     24,    25,    26,    27,    28,    29,    30,    31,
  2446.     32,    33,    34,    35,    36,    37,    38,    39,
  2447.     40,    41,    42,    43,    44,    45,    46,    47,
  2448.     48,    49,    50,    51,    52,    53,    54,    55,
  2449.     56,    57,    58,    59,    60,    61,    62,    63,
  2450.     64,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  2451.     'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
  2452.     'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
  2453.     'x',    'y',    'z',    91,    92,    93,    94,    95,
  2454.     96,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  2455.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  2456.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  2457.     'X',    'Y',    'Z',    123,    124,    125,    126,    127,
  2458.     128,    129,    130,    131,    132,    133,    134,    135,
  2459.     136,    137,    138,    139,    140,    141,    142,    143,
  2460.     144,    145,    146,    147,    148,    149,    150,    151,
  2461.     152,    153,    154,    155,    156,    157,    158,    159,
  2462.     160,    161,    162,    163,    164,    165,    166,    167,
  2463.     168,    169,    170,    171,    172,    173,    174,    175,
  2464.     176,    177,    178,    179,    180,    181,    182,    183,
  2465.     184,    185,    186,    187,    188,    189,    190,    191,
  2466.     192,    193,    194,    195,    196,    197,    198,    199,
  2467.     200,    201,    202,    203,    204,    205,    206,    207,
  2468.     208,    209,    210,    211,    212,    213,    214,    215,
  2469.     216,    217,    218,    219,    220,    221,    222,    223,    
  2470.     224,    225,    226,    227,    228,    229,    230,    231,
  2471.     232,    233,    234,    235,    236,    237,    238,    239,
  2472.     240,    241,    242,    243,    244,    245,    246,    247,
  2473.     248,    249,    250,    251,    252,    253,    254,    255
  2474. };
  2475. #endif  /* !EBCDIC */
  2476. #else
  2477. EXTCONST unsigned char PL_fold[];
  2478. #endif
  2479.  
  2480. #ifdef DOINIT
  2481. EXT unsigned char PL_fold_locale[] = {
  2482.     0,    1,    2,    3,    4,    5,    6,    7,
  2483.     8,    9,    10,    11,    12,    13,    14,    15,
  2484.     16,    17,    18,    19,    20,    21,    22,    23,
  2485.     24,    25,    26,    27,    28,    29,    30,    31,
  2486.     32,    33,    34,    35,    36,    37,    38,    39,
  2487.     40,    41,    42,    43,    44,    45,    46,    47,
  2488.     48,    49,    50,    51,    52,    53,    54,    55,
  2489.     56,    57,    58,    59,    60,    61,    62,    63,
  2490.     64,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
  2491.     'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
  2492.     'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
  2493.     'x',    'y',    'z',    91,    92,    93,    94,    95,
  2494.     96,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  2495.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
  2496.     'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
  2497.     'X',    'Y',    'Z',    123,    124,    125,    126,    127,
  2498.     128,    129,    130,    131,    132,    133,    134,    135,
  2499.     136,    137,    138,    139,    140,    141,    142,    143,
  2500.     144,    145,    146,    147,    148,    149,    150,    151,
  2501.     152,    153,    154,    155,    156,    157,    158,    159,
  2502.     160,    161,    162,    163,    164,    165,    166,    167,
  2503.     168,    169,    170,    171,    172,    173,    174,    175,
  2504.     176,    177,    178,    179,    180,    181,    182,    183,
  2505.     184,    185,    186,    187,    188,    189,    190,    191,
  2506.     192,    193,    194,    195,    196,    197,    198,    199,
  2507.     200,    201,    202,    203,    204,    205,    206,    207,
  2508.     208,    209,    210,    211,    212,    213,    214,    215,
  2509.     216,    217,    218,    219,    220,    221,    222,    223,    
  2510.     224,    225,    226,    227,    228,    229,    230,    231,
  2511.     232,    233,    234,    235,    236,    237,    238,    239,
  2512.     240,    241,    242,    243,    244,    245,    246,    247,
  2513.     248,    249,    250,    251,    252,    253,    254,    255
  2514. };
  2515. #else
  2516. EXT unsigned char PL_fold_locale[];
  2517. #endif
  2518.  
  2519. #ifdef DOINIT
  2520. #ifdef EBCDIC
  2521. EXT unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
  2522.     1,      2,      84,     151,    154,    155,    156,    157,
  2523.     165,    246,    250,    3,      158,    7,      18,     29,
  2524.     40,     51,     62,     73,     85,     96,     107,    118,
  2525.     129,    140,    147,    148,    149,    150,    152,    153,
  2526.     255,      6,      8,      9,     10,     11,     12,     13,
  2527.      14,     15,     24,     25,     26,     27,     28,    226,
  2528.      29,     30,     31,     32,     33,     43,     44,     45,
  2529.      46,     47,     48,     49,     50,     76,     77,     78,
  2530.      79,     80,     81,     82,     83,     84,     85,     86,
  2531.      87,     94,     95,    234,    181,    233,    187,    190,
  2532.     180,     96,     97,     98,     99,    100,    101,    102,
  2533.     104,    112,    182,    174,    236,    232,    229,    103,
  2534.     228,    226,    114,    115,    116,    117,    118,    119,
  2535.     120,    121,    122,    235,    176,    230,    194,    162,
  2536.     130,    131,    132,    133,    134,    135,    136,    137,
  2537.     138,    139,    201,    205,    163,    217,    220,    224,
  2538.     5,      248,    227,    244,    242,    255,    241,    231,
  2539.     240,    253,    16,     197,    19,     20,     21,     187,
  2540.     23,     169,    210,    245,    237,    249,    247,    239,
  2541.     168,    252,    34,     196,    36,     37,     38,     39,
  2542.     41,     42,     251,    254,    238,    223,    221,    213,
  2543.     225,    177,    52,     53,     54,     55,     56,     57,
  2544.     58,     59,     60,     61,     63,     64,     65,     66,
  2545.     67,     68,     69,     70,     71,     72,     74,     75,
  2546.     205,    208,    186,    202,    200,    218,    198,    179,
  2547.     178,    214,    88,     89,     90,     91,     92,     93,
  2548.     217,    166,    170,    207,    199,    209,    206,    204,
  2549.     160,    212,    105,    106,    108,    109,    110,    111,
  2550.     203,    113,    216,    215,    192,    175,    193,    243,
  2551.     172,    161,    123,    124,    125,    126,    127,    128,
  2552.     222,    219,    211,    195,    188,    193,    185,    184,
  2553.     191,    183,    141,    142,    143,    144,    145,    146
  2554. };
  2555. #else  /* ascii rather than ebcdic */
  2556. EXTCONST unsigned char PL_freq[] = {    /* letter frequencies for mixed English/C */
  2557.     1,    2,    84,    151,    154,    155,    156,    157,
  2558.     165,    246,    250,    3,    158,    7,    18,    29,
  2559.     40,    51,    62,    73,    85,    96,    107,    118,
  2560.     129,    140,    147,    148,    149,    150,    152,    153,
  2561.     255,    182,    224,    205,    174,    176,    180,    217,
  2562.     233,    232,    236,    187,    235,    228,    234,    226,
  2563.     222,    219,    211,    195,    188,    193,    185,    184,
  2564.     191,    183,    201,    229,    181,    220,    194,    162,
  2565.     163,    208,    186,    202,    200,    218,    198,    179,
  2566.     178,    214,    166,    170,    207,    199,    209,    206,
  2567.     204,    160,    212,    216,    215,    192,    175,    173,
  2568.     243,    172,    161,    190,    203,    189,    164,    230,
  2569.     167,    248,    227,    244,    242,    255,    241,    231,
  2570.     240,    253,    169,    210,    245,    237,    249,    247,
  2571.     239,    168,    252,    251,    254,    238,    223,    221,
  2572.     213,    225,    177,    197,    171,    196,    159,    4,
  2573.     5,    6,    8,    9,    10,    11,    12,    13,
  2574.     14,    15,    16,    17,    19,    20,    21,    22,
  2575.     23,    24,    25,    26,    27,    28,    30,    31,
  2576.     32,    33,    34,    35,    36,    37,    38,    39,
  2577.     41,    42,    43,    44,    45,    46,    47,    48,
  2578.     49,    50,    52,    53,    54,    55,    56,    57,
  2579.     58,    59,    60,    61,    63,    64,    65,    66,
  2580.     67,    68,    69,    70,    71,    72,    74,    75,
  2581.     76,    77,    78,    79,    80,    81,    82,    83,
  2582.     86,    87,    88,    89,    90,    91,    92,    93,
  2583.     94,    95,    97,    98,    99,    100,    101,    102,
  2584.     103,    104,    105,    106,    108,    109,    110,    111,
  2585.     112,    113,    114,    115,    116,    117,    119,    120,
  2586.     121,    122,    123,    124,    125,    126,    127,    128,
  2587.     130,    131,    132,    133,    134,    135,    136,    137,
  2588.     138,    139,    141,    142,    143,    144,    145,    146
  2589. };
  2590. #endif
  2591. #else
  2592. EXTCONST unsigned char PL_freq[];
  2593. #endif
  2594.  
  2595. #ifdef DEBUGGING
  2596. #ifdef DOINIT
  2597. EXTCONST char* PL_block_type[] = {
  2598.     "NULL",
  2599.     "SUB",
  2600.     "EVAL",
  2601.     "LOOP",
  2602.     "SUBST",
  2603.     "BLOCK",
  2604. };
  2605. #else
  2606. EXTCONST char* PL_block_type[];
  2607. #endif
  2608. #endif
  2609.  
  2610. END_EXTERN_C
  2611.  
  2612. /*****************************************************************************/
  2613. /* This lexer/parser stuff is currently global since yacc is hard to reenter */
  2614. /*****************************************************************************/
  2615. /* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
  2616.  
  2617. #include "perly.h"
  2618.  
  2619. #define LEX_NOTPARSING        11    /* borrowed from toke.c */
  2620.  
  2621. typedef enum {
  2622.     XOPERATOR,
  2623.     XTERM,
  2624.     XREF,
  2625.     XSTATE,
  2626.     XBLOCK,
  2627.     XATTRBLOCK,
  2628.     XATTRTERM,
  2629.     XTERMBLOCK
  2630. } expectation;
  2631.  
  2632. enum {        /* pass one of these to get_vtbl */
  2633.     want_vtbl_sv,
  2634.     want_vtbl_env,
  2635.     want_vtbl_envelem,
  2636.     want_vtbl_sig,
  2637.     want_vtbl_sigelem,
  2638.     want_vtbl_pack,
  2639.     want_vtbl_packelem,
  2640.     want_vtbl_dbline,
  2641.     want_vtbl_isa,
  2642.     want_vtbl_isaelem,
  2643.     want_vtbl_arylen,
  2644.     want_vtbl_glob,
  2645.     want_vtbl_mglob,
  2646.     want_vtbl_nkeys,
  2647.     want_vtbl_taint,
  2648.     want_vtbl_substr,
  2649.     want_vtbl_vec,
  2650.     want_vtbl_pos,
  2651.     want_vtbl_bm,
  2652.     want_vtbl_fm,
  2653.     want_vtbl_uvar,
  2654.     want_vtbl_defelem,
  2655.     want_vtbl_regexp,
  2656.     want_vtbl_collxfrm,
  2657.     want_vtbl_amagic,
  2658.     want_vtbl_amagicelem,
  2659. #ifdef USE_THREADS
  2660.     want_vtbl_mutex,
  2661. #endif
  2662.     want_vtbl_regdata,
  2663.     want_vtbl_regdatum,
  2664.     want_vtbl_backref
  2665. };
  2666.  
  2667.                 /* Note: the lowest 8 bits are reserved for
  2668.                    stuffing into op->op_private */
  2669. #define HINT_PRIVATE_MASK    0x000000ff
  2670. #define HINT_INTEGER        0x00000001
  2671. #define HINT_STRICT_REFS    0x00000002
  2672. #define HINT_LOCALE        0x00000004
  2673. #define HINT_BYTE        0x00000008
  2674. /* #define HINT_notused10    0x00000010 */
  2675.                 /* Note: 20,40,80 used for NATIVE_HINTS */
  2676.  
  2677. #define HINT_BLOCK_SCOPE    0x00000100
  2678. #define HINT_STRICT_SUBS    0x00000200
  2679. #define HINT_STRICT_VARS    0x00000400
  2680.  
  2681. #define HINT_NEW_INTEGER    0x00001000
  2682. #define HINT_NEW_FLOAT        0x00002000
  2683. #define HINT_NEW_BINARY        0x00004000
  2684. #define HINT_NEW_STRING        0x00008000
  2685. #define HINT_NEW_RE        0x00010000
  2686. #define HINT_LOCALIZE_HH    0x00020000 /* %^H needs to be copied */
  2687.  
  2688. #define HINT_RE_TAINT        0x00100000
  2689. #define HINT_RE_EVAL        0x00200000
  2690.  
  2691. #define HINT_FILETEST_ACCESS    0x00400000
  2692. #define HINT_UTF8        0x00800000
  2693.  
  2694. /* Various states of an input record separator SV (rs, nrs) */
  2695. #define RsSNARF(sv)   (! SvOK(sv))
  2696. #define RsSIMPLE(sv)  (SvOK(sv) && (! SvPOK(sv) || SvCUR(sv)))
  2697. #define RsPARA(sv)    (SvPOK(sv) && ! SvCUR(sv))
  2698. #define RsRECORD(sv)  (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
  2699.  
  2700. /* Enable variables which are pointers to functions */
  2701. typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm);
  2702. typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg,
  2703.                       char* strend, char* strbeg, I32 minend,
  2704.                       SV* screamer, void* data, U32 flags);
  2705. typedef char* (CPERLscope(*re_intuit_start_t)) (pTHX_ regexp *prog, SV *sv,
  2706.                         char *strpos, char *strend,
  2707.                         U32 flags,
  2708.                         struct re_scream_pos_data_s *d);
  2709. typedef SV*    (CPERLscope(*re_intuit_string_t)) (pTHX_ regexp *prog);
  2710. typedef void    (CPERLscope(*regfree_t)) (pTHX_ struct regexp* r);
  2711.  
  2712. typedef void (*DESTRUCTORFUNC_NOCONTEXT_t) (void*);
  2713. typedef void (*DESTRUCTORFUNC_t) (pTHXo_ void*);
  2714. typedef void (*SVFUNC_t) (pTHXo_ SV*);
  2715. typedef I32  (*SVCOMPARE_t) (pTHXo_ SV*, SV*);
  2716. typedef void (*XSINIT_t) (pTHXo);
  2717. typedef void (*ATEXIT_t) (pTHXo_ void*);
  2718. typedef void (*XSUBADDR_t) (pTHXo_ CV *);
  2719.  
  2720. /* Set up PERLVAR macros for populating structs */
  2721. #define PERLVAR(var,type) type var;
  2722. #define PERLVARA(var,n,type) type var[n];
  2723. #define PERLVARI(var,type,init) type var;
  2724. #define PERLVARIC(var,type,init) type var;
  2725.  
  2726. /* Interpreter exitlist entry */
  2727. typedef struct exitlistentry {
  2728.     void (*fn) (pTHXo_ void*);
  2729.     void *ptr;
  2730. } PerlExitListEntry;
  2731.  
  2732. #ifdef PERL_GLOBAL_STRUCT
  2733. struct perl_vars {
  2734. #  include "perlvars.h"
  2735. };
  2736.  
  2737. #  ifdef PERL_CORE
  2738. EXT struct perl_vars PL_Vars;
  2739. EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
  2740. #  else /* PERL_CORE */
  2741. #    if !defined(__GNUC__) || !defined(WIN32)
  2742. EXT
  2743. #    endif /* WIN32 */
  2744. struct perl_vars *PL_VarsPtr;
  2745. #    define PL_Vars (*((PL_VarsPtr) \
  2746.                ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
  2747. #  endif /* PERL_CORE */
  2748. #endif /* PERL_GLOBAL_STRUCT */
  2749.  
  2750. #if defined(MULTIPLICITY) || defined(PERL_OBJECT)
  2751. /* If we have multiple interpreters define a struct 
  2752.    holding variables which must be per-interpreter
  2753.    If we don't have threads anything that would have 
  2754.    be per-thread is per-interpreter.
  2755. */
  2756.  
  2757. struct interpreter {
  2758. #  ifndef USE_THREADS
  2759. #    include "thrdvar.h"
  2760. #  endif
  2761. #  include "intrpvar.h"
  2762. /*
  2763.  * The following is a buffer where new variables must
  2764.  * be defined to maintain binary compatibility with PERL_OBJECT
  2765.  */
  2766. PERLVARA(object_compatibility,30,    char)
  2767. };
  2768.  
  2769. #else
  2770. struct interpreter {
  2771.     char broiled;
  2772. };
  2773. #endif /* MULTIPLICITY || PERL_OBJECT */
  2774.  
  2775. #ifdef USE_THREADS
  2776. /* If we have threads define a struct with all the variables
  2777.  * that have to be per-thread
  2778.  */
  2779.  
  2780.  
  2781. struct perl_thread {
  2782. #include "thrdvar.h"
  2783. };
  2784.  
  2785. typedef struct perl_thread *Thread;
  2786.  
  2787. #else
  2788. typedef void *Thread;
  2789. #endif
  2790.  
  2791. /* Done with PERLVAR macros for now ... */
  2792. #undef PERLVAR
  2793. #undef PERLVARA
  2794. #undef PERLVARI
  2795. #undef PERLVARIC
  2796.  
  2797. #include "thread.h"
  2798. #include "pp.h"
  2799.  
  2800. #ifndef PERL_CALLCONV
  2801. #  define PERL_CALLCONV
  2802. #endif 
  2803.  
  2804. #ifndef NEXT30_NO_ATTRIBUTE
  2805. #  ifndef HASATTRIBUTE       /* disable GNU-cc attribute checking? */
  2806. #    ifdef  __attribute__      /* Avoid possible redefinition errors */
  2807. #      undef  __attribute__
  2808. #    endif
  2809. #    define __attribute__(attr)
  2810. #  endif
  2811. #endif
  2812.  
  2813. #ifdef PERL_OBJECT
  2814. #  define PERL_DECL_PROT
  2815. #endif
  2816.  
  2817. #undef PERL_CKDEF
  2818. #undef PERL_PPDEF
  2819. #define PERL_CKDEF(s)    OP *s (pTHX_ OP *o);
  2820. #define PERL_PPDEF(s)    OP *s (pTHX);
  2821.  
  2822. #include "proto.h"
  2823.  
  2824. #ifdef PERL_OBJECT
  2825. #  undef PERL_DECL_PROT
  2826. #endif
  2827.  
  2828. #ifndef PERL_OBJECT
  2829. /* this has structure inits, so it cannot be included before here */
  2830. #  include "opcode.h"
  2831. #endif
  2832.  
  2833. /* The following must follow proto.h as #defines mess up syntax */
  2834.  
  2835. #if !defined(PERL_FOR_X2P)
  2836. #  include "embedvar.h"
  2837. #endif
  2838.  
  2839. /* Now include all the 'global' variables 
  2840.  * If we don't have threads or multiple interpreters
  2841.  * these include variables that would have been their struct-s 
  2842.  */
  2843.                          
  2844. #define PERLVAR(var,type) EXT type PL_##var;
  2845. #define PERLVARA(var,n,type) EXT type PL_##var[n];
  2846. #define PERLVARI(var,type,init) EXT type  PL_##var INIT(init);
  2847. #define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
  2848.  
  2849. #if !defined(MULTIPLICITY) && !defined(PERL_OBJECT)
  2850. START_EXTERN_C
  2851. #  include "intrpvar.h"
  2852. #  ifndef USE_THREADS
  2853. #    include "thrdvar.h"
  2854. #  endif
  2855. END_EXTERN_C
  2856. #endif
  2857.  
  2858. #ifdef PERL_OBJECT
  2859. #  include "embed.h"
  2860.  
  2861. #  ifdef DOINIT
  2862. #    include "INTERN.h"
  2863. #  else
  2864. #    include "EXTERN.h"
  2865. #  endif
  2866.  
  2867. /* this has structure inits, so it cannot be included before here */
  2868. #  include "opcode.h"
  2869.  
  2870. #else
  2871. #  if defined(WIN32)
  2872. #    include "embed.h"
  2873. #  endif
  2874. #endif  /* PERL_OBJECT */
  2875.  
  2876. #ifndef PERL_GLOBAL_STRUCT
  2877. START_EXTERN_C
  2878.  
  2879. #  include "perlvars.h"
  2880.  
  2881. END_EXTERN_C
  2882. #endif
  2883.  
  2884. #undef PERLVAR
  2885. #undef PERLVARA
  2886. #undef PERLVARI
  2887. #undef PERLVARIC
  2888.  
  2889. START_EXTERN_C
  2890.  
  2891. #ifdef DOINIT
  2892.  
  2893. EXT MGVTBL PL_vtbl_sv =    {MEMBER_TO_FPTR(Perl_magic_get),
  2894.                 MEMBER_TO_FPTR(Perl_magic_set),
  2895.                     MEMBER_TO_FPTR(Perl_magic_len),
  2896.                         0,    0};
  2897. EXT MGVTBL PL_vtbl_env =    {0,    MEMBER_TO_FPTR(Perl_magic_set_all_env),
  2898.                 0,    MEMBER_TO_FPTR(Perl_magic_clear_all_env),
  2899.                             0};
  2900. EXT MGVTBL PL_vtbl_envelem =    {0,    MEMBER_TO_FPTR(Perl_magic_setenv),
  2901.                     0,    MEMBER_TO_FPTR(Perl_magic_clearenv),
  2902.                             0};
  2903. EXT MGVTBL PL_vtbl_sig =    {0,    0,         0, 0, 0};
  2904. EXT MGVTBL PL_vtbl_sigelem =    {MEMBER_TO_FPTR(Perl_magic_getsig),
  2905.                     MEMBER_TO_FPTR(Perl_magic_setsig),
  2906.                     0,    MEMBER_TO_FPTR(Perl_magic_clearsig),
  2907.                             0};
  2908. EXT MGVTBL PL_vtbl_pack =    {0,    0,    MEMBER_TO_FPTR(Perl_magic_sizepack),    MEMBER_TO_FPTR(Perl_magic_wipepack),
  2909.                             0};
  2910. EXT MGVTBL PL_vtbl_packelem =    {MEMBER_TO_FPTR(Perl_magic_getpack),
  2911.                 MEMBER_TO_FPTR(Perl_magic_setpack),
  2912.                     0,    MEMBER_TO_FPTR(Perl_magic_clearpack),
  2913.                             0};
  2914. EXT MGVTBL PL_vtbl_dbline =    {0,    MEMBER_TO_FPTR(Perl_magic_setdbline),
  2915.                     0,    0,    0};
  2916. EXT MGVTBL PL_vtbl_isa =    {0,    MEMBER_TO_FPTR(Perl_magic_setisa),
  2917.                     0,    MEMBER_TO_FPTR(Perl_magic_setisa),
  2918.                             0};
  2919. EXT MGVTBL PL_vtbl_isaelem =    {0,    MEMBER_TO_FPTR(Perl_magic_setisa),
  2920.                     0,    0,    0};
  2921. EXT MGVTBL PL_vtbl_arylen =    {MEMBER_TO_FPTR(Perl_magic_getarylen),
  2922.                 MEMBER_TO_FPTR(Perl_magic_setarylen),
  2923.                     0,    0,    0};
  2924. EXT MGVTBL PL_vtbl_glob =    {MEMBER_TO_FPTR(Perl_magic_getglob),
  2925.                 MEMBER_TO_FPTR(Perl_magic_setglob),
  2926.                     0,    0,    0};
  2927. EXT MGVTBL PL_vtbl_mglob =    {0,    MEMBER_TO_FPTR(Perl_magic_setmglob),
  2928.                     0,    0,    0};
  2929. EXT MGVTBL PL_vtbl_nkeys =    {MEMBER_TO_FPTR(Perl_magic_getnkeys),
  2930.                 MEMBER_TO_FPTR(Perl_magic_setnkeys),
  2931.                     0,    0,    0};
  2932. EXT MGVTBL PL_vtbl_taint =    {MEMBER_TO_FPTR(Perl_magic_gettaint),MEMBER_TO_FPTR(Perl_magic_settaint),
  2933.                     0,    0,    0};
  2934. EXT MGVTBL PL_vtbl_substr =    {MEMBER_TO_FPTR(Perl_magic_getsubstr), MEMBER_TO_FPTR(Perl_magic_setsubstr),
  2935.                     0,    0,    0};
  2936. EXT MGVTBL PL_vtbl_vec =    {MEMBER_TO_FPTR(Perl_magic_getvec),
  2937.                 MEMBER_TO_FPTR(Perl_magic_setvec),
  2938.                     0,    0,    0};
  2939. EXT MGVTBL PL_vtbl_pos =    {MEMBER_TO_FPTR(Perl_magic_getpos),
  2940.                 MEMBER_TO_FPTR(Perl_magic_setpos),
  2941.                     0,    0,    0};
  2942. EXT MGVTBL PL_vtbl_bm =    {0,    MEMBER_TO_FPTR(Perl_magic_setbm),
  2943.                     0,    0,    0};
  2944. EXT MGVTBL PL_vtbl_fm =    {0,    MEMBER_TO_FPTR(Perl_magic_setfm),
  2945.                     0,    0,    0};
  2946. EXT MGVTBL PL_vtbl_uvar =    {MEMBER_TO_FPTR(Perl_magic_getuvar),
  2947.                 MEMBER_TO_FPTR(Perl_magic_setuvar),
  2948.                     0,    0,    0};
  2949. #ifdef USE_THREADS
  2950. EXT MGVTBL PL_vtbl_mutex =    {0,    0,    0,    0,    MEMBER_TO_FPTR(Perl_magic_mutexfree)};
  2951. #endif /* USE_THREADS */
  2952. EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),MEMBER_TO_FPTR(Perl_magic_setdefelem),
  2953.                     0,    0,    0};
  2954.  
  2955. EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)};
  2956. EXT MGVTBL PL_vtbl_regdata = {0, 0, MEMBER_TO_FPTR(Perl_magic_regdata_cnt), 0, 0};
  2957. EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get),
  2958.                    MEMBER_TO_FPTR(Perl_magic_regdatum_set), 0, 0, 0};
  2959.  
  2960. #ifdef USE_LOCALE_COLLATE
  2961. EXT MGVTBL PL_vtbl_collxfrm = {0,
  2962.                 MEMBER_TO_FPTR(Perl_magic_setcollxfrm),
  2963.                     0,    0,    0};
  2964. #endif
  2965.  
  2966. EXT MGVTBL PL_vtbl_amagic =       {0,     MEMBER_TO_FPTR(Perl_magic_setamagic),
  2967.                                         0,      0,      MEMBER_TO_FPTR(Perl_magic_setamagic)};
  2968. EXT MGVTBL PL_vtbl_amagicelem =   {0,     MEMBER_TO_FPTR(Perl_magic_setamagic),
  2969.                                         0,      0,      MEMBER_TO_FPTR(Perl_magic_setamagic)};
  2970.  
  2971. EXT MGVTBL PL_vtbl_backref =       {0,    0,
  2972.                     0,    0,    MEMBER_TO_FPTR(Perl_magic_killbackrefs)};
  2973.  
  2974. #else /* !DOINIT */
  2975.  
  2976. EXT MGVTBL PL_vtbl_sv;
  2977. EXT MGVTBL PL_vtbl_env;
  2978. EXT MGVTBL PL_vtbl_envelem;
  2979. EXT MGVTBL PL_vtbl_sig;
  2980. EXT MGVTBL PL_vtbl_sigelem;
  2981. EXT MGVTBL PL_vtbl_pack;
  2982. EXT MGVTBL PL_vtbl_packelem;
  2983. EXT MGVTBL PL_vtbl_dbline;
  2984. EXT MGVTBL PL_vtbl_isa;
  2985. EXT MGVTBL PL_vtbl_isaelem;
  2986. EXT MGVTBL PL_vtbl_arylen;
  2987. EXT MGVTBL PL_vtbl_glob;
  2988. EXT MGVTBL PL_vtbl_mglob;
  2989. EXT MGVTBL PL_vtbl_nkeys;
  2990. EXT MGVTBL PL_vtbl_taint;
  2991. EXT MGVTBL PL_vtbl_substr;
  2992. EXT MGVTBL PL_vtbl_vec;
  2993. EXT MGVTBL PL_vtbl_pos;
  2994. EXT MGVTBL PL_vtbl_bm;
  2995. EXT MGVTBL PL_vtbl_fm;
  2996. EXT MGVTBL PL_vtbl_uvar;
  2997.  
  2998. #ifdef USE_THREADS
  2999. EXT MGVTBL PL_vtbl_mutex;
  3000. #endif /* USE_THREADS */
  3001.  
  3002. EXT MGVTBL PL_vtbl_defelem;
  3003. EXT MGVTBL PL_vtbl_regexp;
  3004. EXT MGVTBL PL_vtbl_regdata;
  3005. EXT MGVTBL PL_vtbl_regdatum;
  3006.  
  3007. #ifdef USE_LOCALE_COLLATE
  3008. EXT MGVTBL PL_vtbl_collxfrm;
  3009. #endif
  3010.  
  3011. EXT MGVTBL PL_vtbl_amagic;
  3012. EXT MGVTBL PL_vtbl_amagicelem;
  3013.  
  3014. EXT MGVTBL PL_vtbl_backref;
  3015.  
  3016. #endif /* !DOINIT */
  3017.  
  3018. enum {
  3019.   fallback_amg,        abs_amg,
  3020.   bool__amg,   nomethod_amg,
  3021.   string_amg,  numer_amg,
  3022.   add_amg,     add_ass_amg,
  3023.   subtr_amg,   subtr_ass_amg,
  3024.   mult_amg,    mult_ass_amg,
  3025.   div_amg,     div_ass_amg,
  3026.   modulo_amg,  modulo_ass_amg,
  3027.   pow_amg,     pow_ass_amg,
  3028.   lshift_amg,  lshift_ass_amg,
  3029.   rshift_amg,  rshift_ass_amg,
  3030.   band_amg,    band_ass_amg,
  3031.   bor_amg,     bor_ass_amg,
  3032.   bxor_amg,    bxor_ass_amg,
  3033.   lt_amg,      le_amg,
  3034.   gt_amg,      ge_amg,
  3035.   eq_amg,      ne_amg,
  3036.   ncmp_amg,    scmp_amg,
  3037.   slt_amg,     sle_amg,
  3038.   sgt_amg,     sge_amg,
  3039.   seq_amg,     sne_amg,
  3040.   not_amg,     compl_amg,
  3041.   inc_amg,     dec_amg,
  3042.   atan2_amg,   cos_amg,
  3043.   sin_amg,     exp_amg,
  3044.   log_amg,     sqrt_amg,
  3045.   repeat_amg,   repeat_ass_amg,
  3046.   concat_amg,  concat_ass_amg,
  3047.   copy_amg,    neg_amg,
  3048.   to_sv_amg,   to_av_amg,
  3049.   to_hv_amg,   to_gv_amg,
  3050.   to_cv_amg,   iter_amg,    
  3051.   max_amg_code
  3052.   /* Do not leave a trailing comma here.  C9X allows it, C89 doesn't. */
  3053. };
  3054.  
  3055. #define NofAMmeth max_amg_code
  3056.  
  3057. #ifdef DOINIT
  3058. EXTCONST char * PL_AMG_names[NofAMmeth] = {
  3059.   "fallback",    "abs",            /* "fallback" should be the first. */
  3060.   "bool",    "nomethod",
  3061.   "\"\"",    "0+",
  3062.   "+",        "+=",
  3063.   "-",        "-=",
  3064.   "*",        "*=",
  3065.   "/",        "/=",
  3066.   "%",        "%=",
  3067.   "**",        "**=",
  3068.   "<<",        "<<=",
  3069.   ">>",        ">>=",
  3070.   "&",        "&=",
  3071.   "|",        "|=",
  3072.   "^",        "^=",
  3073.   "<",        "<=",
  3074.   ">",        ">=",
  3075.   "==",        "!=",
  3076.   "<=>",    "cmp",
  3077.   "lt",        "le",
  3078.   "gt",        "ge",
  3079.   "eq",        "ne",
  3080.   "!",        "~",
  3081.   "++",        "--",
  3082.   "atan2",    "cos",
  3083.   "sin",    "exp",
  3084.   "log",    "sqrt",
  3085.   "x",        "x=",
  3086.   ".",        ".=",
  3087.   "=",        "neg",
  3088.   "${}",    "@{}",
  3089.   "%{}",    "*{}",
  3090.   "&{}",    "<>",
  3091. };
  3092. #else
  3093. EXTCONST char * PL_AMG_names[NofAMmeth];
  3094. #endif /* def INITAMAGIC */
  3095.  
  3096. END_EXTERN_C
  3097.  
  3098. struct am_table {
  3099.   long was_ok_sub;
  3100.   long was_ok_am;
  3101.   U32 flags;
  3102.   CV* table[NofAMmeth];
  3103.   long fallback;
  3104. };
  3105. struct am_table_short {
  3106.   long was_ok_sub;
  3107.   long was_ok_am;
  3108.   U32 flags;
  3109. };
  3110. typedef struct am_table AMT;
  3111. typedef struct am_table_short AMTS;
  3112.  
  3113. #define AMGfallNEVER    1
  3114. #define AMGfallNO    2
  3115. #define AMGfallYES    3
  3116.  
  3117. #define AMTf_AMAGIC        1
  3118. #define AMT_AMAGIC(amt)        ((amt)->flags & AMTf_AMAGIC)
  3119. #define AMT_AMAGIC_on(amt)    ((amt)->flags |= AMTf_AMAGIC)
  3120. #define AMT_AMAGIC_off(amt)    ((amt)->flags &= ~AMTf_AMAGIC)
  3121.  
  3122.  
  3123. /*
  3124.  * some compilers like to redefine cos et alia as faster
  3125.  * (and less accurate?) versions called F_cos et cetera (Quidquid
  3126.  * latine dictum sit, altum viditur.)  This trick collides with
  3127.  * the Perl overloading (amg).  The following #defines fool both.
  3128.  */
  3129.  
  3130. #ifdef _FASTMATH
  3131. #   ifdef atan2
  3132. #       define F_atan2_amg  atan2_amg
  3133. #   endif
  3134. #   ifdef cos
  3135. #       define F_cos_amg    cos_amg
  3136. #   endif
  3137. #   ifdef exp
  3138. #       define F_exp_amg    exp_amg
  3139. #   endif
  3140. #   ifdef log
  3141. #       define F_log_amg    log_amg
  3142. #   endif
  3143. #   ifdef pow
  3144. #       define F_pow_amg    pow_amg
  3145. #   endif
  3146. #   ifdef sin
  3147. #       define F_sin_amg    sin_amg
  3148. #   endif
  3149. #   ifdef sqrt
  3150. #       define F_sqrt_amg   sqrt_amg
  3151. #   endif
  3152. #endif /* _FASTMATH */
  3153.  
  3154. #define PERLDB_ALL        (PERLDBf_SUB    | PERLDBf_LINE    |    \
  3155.                  PERLDBf_NOOPT    | PERLDBf_INTER    |    \
  3156.                  PERLDBf_SUBLINE| PERLDBf_SINGLE|    \
  3157.                  PERLDBf_NAMEEVAL| PERLDBf_NAMEANON)
  3158.                     /* No _NONAME, _GOTO */
  3159. #define PERLDBf_SUB        0x01    /* Debug sub enter/exit */
  3160. #define PERLDBf_LINE        0x02    /* Keep line # */
  3161. #define PERLDBf_NOOPT        0x04    /* Switch off optimizations */
  3162. #define PERLDBf_INTER        0x08    /* Preserve more data for
  3163.                        later inspections  */
  3164. #define PERLDBf_SUBLINE        0x10    /* Keep subr source lines */
  3165. #define PERLDBf_SINGLE        0x20    /* Start with single-step on */
  3166. #define PERLDBf_NONAME        0x40    /* For _SUB: no name of the subr */
  3167. #define PERLDBf_GOTO        0x80    /* Report goto: call DB::goto */
  3168. #define PERLDBf_NAMEEVAL    0x100    /* Informative names for evals */
  3169. #define PERLDBf_NAMEANON    0x200    /* Informative names for anon subs */
  3170.  
  3171. #define PERLDB_SUB    (PL_perldb && (PL_perldb & PERLDBf_SUB))
  3172. #define PERLDB_LINE    (PL_perldb && (PL_perldb & PERLDBf_LINE))
  3173. #define PERLDB_NOOPT    (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
  3174. #define PERLDB_INTER    (PL_perldb && (PL_perldb & PERLDBf_INTER))
  3175. #define PERLDB_SUBLINE    (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
  3176. #define PERLDB_SINGLE    (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
  3177. #define PERLDB_SUB_NN    (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
  3178. #define PERLDB_GOTO    (PL_perldb && (PL_perldb & PERLDBf_GOTO))
  3179. #define PERLDB_NAMEEVAL    (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL))
  3180. #define PERLDB_NAMEANON    (PL_perldb && (PL_perldb & PERLDBf_NAMEANON))
  3181.  
  3182.  
  3183. #ifdef USE_LOCALE_NUMERIC
  3184.  
  3185. #define SET_NUMERIC_STANDARD() \
  3186.     set_numeric_standard();
  3187.  
  3188. #define SET_NUMERIC_LOCAL() \
  3189.     set_numeric_local();
  3190.  
  3191. #define IN_LOCALE_RUNTIME    (PL_curcop->op_private & HINT_LOCALE)
  3192. #define IN_LOCALE_COMPILETIME    (PL_hints & HINT_LOCALE)
  3193.  
  3194. #define IN_LOCALE \
  3195.     (PL_curcop == &PL_compiling ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
  3196.  
  3197. #define IS_NUMERIC_RADIX(s, send)    \
  3198.     (PL_numeric_radix_sv \
  3199.      && IN_LOCALE \
  3200.      && SvCUR(PL_numeric_radix_sv) <= (STRLEN)((send)-(s)) \
  3201.      && memEQ(s, SvPVX(PL_numeric_radix_sv), SvCUR(PL_numeric_radix_sv)))
  3202.  
  3203. #define STORE_NUMERIC_LOCAL_SET_STANDARD() \
  3204.     bool was_local = PL_numeric_local && IN_LOCALE; \
  3205.     if (was_local) SET_NUMERIC_STANDARD();
  3206.  
  3207. #define STORE_NUMERIC_STANDARD_SET_LOCAL() \
  3208.     bool was_standard = PL_numeric_standard && IN_LOCALE; \
  3209.     if (was_standard) SET_NUMERIC_LOCAL();
  3210.  
  3211. #define RESTORE_NUMERIC_LOCAL() \
  3212.     if (was_local) SET_NUMERIC_LOCAL();
  3213.  
  3214. #define RESTORE_NUMERIC_STANDARD() \
  3215.     if (was_standard) SET_NUMERIC_STANDARD();
  3216.  
  3217. #define Atof                my_atof
  3218.  
  3219. #else /* !USE_LOCALE_NUMERIC */
  3220.  
  3221. #define SET_NUMERIC_STANDARD()      /**/
  3222. #define SET_NUMERIC_LOCAL()         /**/
  3223. #define IS_NUMERIC_RADIX(a, b)        (0)
  3224. #define STORE_NUMERIC_LOCAL_SET_STANDARD()    /**/
  3225. #define STORE_NUMERIC_STANDARD_SET_LOCAL()    /**/
  3226. #define RESTORE_NUMERIC_LOCAL()        /**/
  3227. #define RESTORE_NUMERIC_STANDARD()    /**/
  3228. #define Atof                Perl_atof
  3229.  
  3230. #endif /* !USE_LOCALE_NUMERIC */
  3231.  
  3232. #if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
  3233. #    ifdef __hpux
  3234. #        define strtoll __strtoll    /* secret handshake */
  3235. #    endif
  3236. #   if !defined(Strtol) && defined(HAS_STRTOLL)
  3237. #       define Strtol    strtoll
  3238. #   endif
  3239. /* is there atoq() anywhere? */
  3240. #endif
  3241. #if !defined(Strtol) && defined(HAS_STRTOL)
  3242. #   define Strtol    strtol
  3243. #endif
  3244. #ifndef Atol
  3245. /* It would be more fashionable to use Strtol() to define atol()
  3246.  * (as is done for Atoul(), see below) but for backward compatibility
  3247.  * we just assume atol(). */
  3248. #   if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL)
  3249. #       define Atol    atoll
  3250. #   else
  3251. #       define Atol    atol
  3252. #   endif
  3253. #endif
  3254.  
  3255. #if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
  3256. #    ifdef __hpux
  3257. #        define strtoull __strtoull    /* secret handshake */
  3258. #    endif
  3259. #    if !defined(Strtoul) && defined(HAS_STRTOULL)
  3260. #       define Strtoul    strtoull
  3261. #    endif
  3262. #    if !defined(Strtoul) && defined(HAS_STRTOUQ)
  3263. #       define Strtoul    strtouq
  3264. #    endif
  3265. /* is there atouq() anywhere? */
  3266. #endif
  3267. #if !defined(Strtoul) && defined(HAS_STRTOUL)
  3268. #   define Strtoul    strtoul
  3269. #endif
  3270. #ifndef Atoul
  3271. #   define Atoul(s)    Strtoul(s, (char **)NULL, 10)
  3272. #endif
  3273.  
  3274. #if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE)
  3275. /* 
  3276.  * Now we have __attribute__ out of the way 
  3277.  * Remap printf 
  3278.  */
  3279. #undef printf
  3280. #define printf PerlIO_stdoutf
  3281. #endif
  3282.  
  3283. /* if these never got defined, they need defaults */
  3284. #ifndef PERL_SET_CONTEXT
  3285. #  define PERL_SET_CONTEXT(i)        PERL_SET_INTERP(i)
  3286. #endif
  3287.  
  3288. #ifndef PERL_GET_CONTEXT
  3289. #  define PERL_GET_CONTEXT        PERL_GET_INTERP
  3290. #endif
  3291.  
  3292. #ifndef PERL_GET_THX
  3293. #  define PERL_GET_THX            ((void*)NULL)
  3294. #endif
  3295.  
  3296. #ifndef PERL_SET_THX
  3297. #  define PERL_SET_THX(t)        NOOP
  3298. #endif
  3299.  
  3300. #ifndef PERL_SCRIPT_MODE
  3301. #define PERL_SCRIPT_MODE "r"
  3302. #endif
  3303.  
  3304. /*
  3305.  * Some operating systems are stingy with stack allocation,
  3306.  * so perl may have to guard against stack overflow.
  3307.  */
  3308. #ifndef PERL_STACK_OVERFLOW_CHECK
  3309. #define PERL_STACK_OVERFLOW_CHECK()  NOOP
  3310. #endif
  3311.  
  3312. /*
  3313.  * Some nonpreemptive operating systems find it convenient to
  3314.  * check for asynchronous conditions after each op execution.
  3315.  * Keep this check simple, or it may slow down execution
  3316.  * massively.
  3317.  */
  3318. #ifndef PERL_ASYNC_CHECK
  3319. #define PERL_ASYNC_CHECK()  NOOP
  3320. #endif
  3321.  
  3322. /*
  3323.  * On some operating systems, a memory allocation may succeed,
  3324.  * but put the process too close to the system's comfort limit.
  3325.  * In this case, PERL_ALLOC_CHECK frees the pointer and sets
  3326.  * it to NULL.
  3327.  */
  3328. #ifndef PERL_ALLOC_CHECK
  3329. #define PERL_ALLOC_CHECK(p)  NOOP
  3330. #endif
  3331.  
  3332. /*
  3333.  * nice_chunk and nice_chunk size need to be set
  3334.  * and queried under the protection of sv_mutex
  3335.  */
  3336. #define offer_nice_chunk(chunk, chunk_size) do {    \
  3337.     LOCK_SV_MUTEX;                    \
  3338.     if (!PL_nice_chunk) {                \
  3339.         PL_nice_chunk = (char*)(chunk);        \
  3340.         PL_nice_chunk_size = (chunk_size);        \
  3341.     }                        \
  3342.     else {                        \
  3343.         Safefree(chunk);                \
  3344.     }                        \
  3345.     UNLOCK_SV_MUTEX;                \
  3346.     } while (0)
  3347.  
  3348. #ifdef HAS_SEM
  3349. #   include <sys/ipc.h>
  3350. #   include <sys/sem.h>
  3351. #   ifndef HAS_UNION_SEMUN    /* Provide the union semun. */
  3352.     union semun {
  3353.     int        val;
  3354.     struct semid_ds    *buf;
  3355.     unsigned short    *array;
  3356.     };
  3357. #   endif
  3358. #   ifdef USE_SEMCTL_SEMUN
  3359. #    ifdef IRIX32_SEMUN_BROKEN_BY_GCC
  3360.             union gccbug_semun {
  3361.         int             val;
  3362.         struct semid_ds *buf;
  3363.         unsigned short  *array;
  3364.         char            __dummy[5];
  3365.         };
  3366. #           define semun gccbug_semun
  3367. #    endif
  3368. #       define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun)
  3369. #   else
  3370. #       ifdef USE_SEMCTL_SEMID_DS
  3371. #           ifdef EXTRA_F_IN_SEMUN_BUF
  3372. #               define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buff)
  3373. #           else
  3374. #               define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
  3375. #           endif
  3376. #       endif
  3377. #   endif
  3378. #endif
  3379.  
  3380. /*
  3381.  * Boilerplate macros for initializing and accessing interpreter-local
  3382.  * data from C.  All statics in extensions should be reworked to use
  3383.  * this, if you want to make the extension thread-safe.  See ext/re/re.xs
  3384.  * for an example of the use of these macros.
  3385.  *
  3386.  * Code that uses these macros is responsible for the following:
  3387.  * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
  3388.  * 2. Declare a typedef named my_cxt_t that is a structure that contains
  3389.  *    all the data that needs to be interpreter-local.
  3390.  * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
  3391.  * 4. Use the MY_CXT_INIT macro such that it is called exactly once
  3392.  *    (typically put in the BOOT: section).
  3393.  * 5. Use the members of the my_cxt_t structure everywhere as
  3394.  *    MY_CXT.member.
  3395.  * 6. Use the dMY_CXT macro (a declaration) in all the functions that
  3396.  *    access MY_CXT.
  3397.  */
  3398.  
  3399. #if defined(PERL_IMPLICIT_CONTEXT)
  3400.  
  3401. /* This must appear in all extensions that define a my_cxt_t structure,
  3402.  * right after the definition (i.e. at file scope).  The non-threads
  3403.  * case below uses it to declare the data as static. */
  3404. #define START_MY_CXT
  3405.  
  3406. /* Fetches the SV that keeps the per-interpreter data. */
  3407. #define dMY_CXT_SV \
  3408.     SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY,        \
  3409.                   sizeof(MY_CXT_KEY)-1, TRUE)
  3410.  
  3411. /* This declaration should be used within all functions that use the
  3412.  * interpreter-local data. */
  3413. #define dMY_CXT    \
  3414.     dMY_CXT_SV;                            \
  3415.     my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
  3416.  
  3417. /* Creates and zeroes the per-interpreter data.
  3418.  * (We allocate my_cxtp in a Perl SV so that it will be released when
  3419.  * the interpreter goes away.) */
  3420. #define MY_CXT_INIT \
  3421.     dMY_CXT_SV;                            \
  3422.     /* newSV() allocates one more than needed */            \
  3423.     my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
  3424.     Zero(my_cxtp, 1, my_cxt_t);                    \
  3425.     sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
  3426.  
  3427. /* This macro must be used to access members of the my_cxt_t structure.
  3428.  * e.g. MYCXT.some_data */
  3429. #define MY_CXT        (*my_cxtp)
  3430.  
  3431. /* Judicious use of these macros can reduce the number of times dMY_CXT
  3432.  * is used.  Use is similar to pTHX, aTHX etc. */
  3433. #define pMY_CXT        my_cxt_t *my_cxtp
  3434. #define pMY_CXT_    pMY_CXT,
  3435. #define _pMY_CXT    ,pMY_CXT
  3436. #define aMY_CXT        my_cxtp
  3437. #define aMY_CXT_    aMY_CXT,
  3438. #define _aMY_CXT    ,aMY_CXT
  3439.  
  3440. #else /* USE_ITHREADS */
  3441.  
  3442. #define START_MY_CXT    static my_cxt_t my_cxt;
  3443. #define dMY_CXT_SV    dNOOP
  3444. #define dMY_CXT        dNOOP
  3445. #define MY_CXT_INIT    NOOP
  3446. #define MY_CXT        my_cxt
  3447.  
  3448. #define pMY_CXT        void
  3449. #define pMY_CXT_
  3450. #define _pMY_CXT
  3451. #define aMY_CXT
  3452. #define aMY_CXT_
  3453. #define _aMY_CXT
  3454.  
  3455. #endif /* !defined(USE_ITHREADS) */
  3456.  
  3457. #ifdef I_FCNTL
  3458. #  include <fcntl.h>
  3459. #endif
  3460.  
  3461. #ifdef I_SYS_FILE
  3462. #  include <sys/file.h>
  3463. #endif
  3464.  
  3465. #ifndef O_RDONLY
  3466. /* Assume UNIX defaults */
  3467. #    define O_RDONLY    0000
  3468. #    define O_WRONLY    0001
  3469. #    define O_RDWR    0002
  3470. #    define O_CREAT    0100
  3471. #endif
  3472.  
  3473. #ifndef O_BINARY
  3474. #  define O_BINARY 0
  3475. #endif
  3476.  
  3477. #ifndef O_TEXT
  3478. #  define O_TEXT 0
  3479. #endif
  3480.  
  3481. #ifdef IAMSUID
  3482.  
  3483. #ifdef I_SYS_STATVFS
  3484. #   include <sys/statvfs.h>     /* for f?statvfs() */
  3485. #endif
  3486. #ifdef I_SYS_MOUNT
  3487. #   include <sys/mount.h>       /* for *BSD f?statfs() */
  3488. #endif
  3489. #ifdef I_MNTENT
  3490. #   include <mntent.h>          /* for getmntent() */
  3491. #endif
  3492. #ifdef I_SYS_STATFS
  3493. #   include <sys/statfs.h>      /* for some statfs() */
  3494. #endif
  3495. #ifdef I_SYS_VFS
  3496. #  ifdef __sgi
  3497. #    define sv IRIX_sv        /* kludge: IRIX has an sv of its own */
  3498. #  endif
  3499. #    include <sys/vfs.h>    /* for some statfs() */
  3500. #  ifdef __sgi
  3501. #    undef IRIX_sv
  3502. #  endif
  3503. #endif
  3504. #ifdef I_USTAT
  3505. #   include <ustat.h>           /* for ustat() */
  3506. #endif
  3507.  
  3508. #if !defined(PERL_MOUNT_NOSUID) && defined(MOUNT_NOSUID)
  3509. #    define PERL_MOUNT_NOSUID MOUNT_NOSUID
  3510. #endif
  3511. #if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID)
  3512. #    define PERL_MOUNT_NOSUID MNT_NOSUID
  3513. #endif
  3514. #if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID)
  3515. #   define PERL_MOUNT_NOSUID MS_NOSUID
  3516. #endif
  3517. #if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID)
  3518. #   define PERL_MOUNT_NOSUID M_NOSUID
  3519. #endif
  3520.  
  3521. #endif /* IAMSUID */
  3522.  
  3523. #ifdef I_LIBUTIL
  3524. #   include <libutil.h>        /* setproctitle() in some FreeBSDs */
  3525. #endif
  3526.  
  3527. #ifndef EXEC_ARGV_CAST
  3528. #define EXEC_ARGV_CAST(x) x
  3529. #endif
  3530.  
  3531. /* and finally... */
  3532. #define PERL_PATCHLEVEL_H_IMPLICIT
  3533. #include "patchlevel.h"
  3534. #undef PERL_PATCHLEVEL_H_IMPLICIT
  3535.  
  3536. /* Mention
  3537.    
  3538.    NV_PRESERVES_UV
  3539.  
  3540.    HAS_ICONV
  3541.    I_ICONV
  3542.  
  3543.    HAS_MKSTEMP
  3544.    HAS_MKSTEMPS
  3545.    HAS_MKDTEMP
  3546.  
  3547.    HAS_GETCWD
  3548.  
  3549.    HAS_MMAP
  3550.    HAS_MPROTECT
  3551.    HAS_MSYNC
  3552.    HAS_MADVISE
  3553.    HAS_MUNMAP
  3554.    I_SYSMMAN
  3555.    Mmap_t
  3556.  
  3557.    NVef
  3558.    NVff
  3559.    NVgf
  3560.  
  3561.    so that Configure picks them up. */
  3562.  
  3563. #endif /* Include guard */
  3564.